• Что будет с биткоином, когда вычислительной мощности не будет хватать, чтобы майнить?

    ptchol
    @ptchol
    Linux system administrator
    Если рассматривать с "традиционной" точки зрения, то любой майнер это эммитент.
    К тому времени когда сложность повысится до невозможной, биткоин уже должен (поидее) достичь своей основной цели - стать полноценной валютой. И вполне возможно, что в этом случае эммитентами станут те лица, которые максимально в этом заинтереснованы, крупные компании и возможно государства.
    Ответ написан
    Комментировать
  • Что будет с биткоином, когда вычислительной мощности не будет хватать, чтобы майнить?

    sheknitrtch
    @sheknitrtch
    Если майнить будет не выгодно с точки зрения затрат электроэнергии, то майнеры могут ввести комиссию за транзакции. Сейчас каждый майнер получает фиксированную сумму за каждый подписанный блок данных - 25 BTC [1]. Но пользователь, который делает перевод BTC, может на своё усмотрение часть суммы перечислить майнеру, который будет делать Proof of work. См [2]
    Reward

    When a block is discovered, the discoverer may award themselves a certain number of bitcoins, which is agreed-upon by everyone in the network. Currently this bounty is 25 bitcoins; this value will halve every 210,000 blocks. See Controlled Currency Supply.

    Additionally, the miner is awarded the fees paid by users sending transactions. The fee is an incentive for the miner to include the transaction in their block. In the future, as the number of new bitcoins miners are allowed to create in each block dwindles, the fees will make up a much more important percentage of mining income.


    Другой вариант, объединять множество компьютеров в пулы, которые будут майнить не для своей выгоды, а для того, чтобы сеть Bitcoin существовала. Например есть проект Folding@Home, участники которого безвозмездно предоставляют мощности своих процессоров и видеокарт для расчёта процесса сворачивания белка. Почему бы пользователям Bitcoin не объединиться таким же образом?
    Ответ написан
    1 комментарий
  • Как генерировать и хранить ключи шифрования под Андроид?

    TonyCode
    @TonyCode
    В андроид локально хранить данные можно только в 3-х местах:
    1. sdcard
    2. внутренняя память
    3. Защищённая (на нерутованных устройствах) область каждого приложения /data/data/ru.mycompany.myapp/

    В первых 2-х лазить может любое приложение
    В 3-ем только наше, но если телефон рутованый/либо лазит вирус - то тот, кто сможет получить доступ (через SuperSU либо exploit)

    => Остаётся хранить только как в /data/data/ru.mycompany.myapp/ плюс хранить не в чистом виде, а пошифровав сам ключ с помощью второго ключа (хоть xor-ом), который захардкоден в приложении.
    Плюс в самом приложении вместо захардкоденного второго ключа ("ключа для ключа") - его можно динамически формировать по-частям, дабы не хранить целиком, иначе простым дизассемблированием можно его легко получить. Думаю этого должно хватить.

    ---
    Если быть совсем параноиком - надо еще нереально заобфусцировать весь код превратив его в "big ball of mud" / встроить антиотладку (замерить время - и если превышает - идти на "обманную" ветку выполнения) - тогда уж точно мало кто захочет разбираться во всём этом...

    ---
    Upd: Динамическая генерация мастер-ключа с обфускацией - даже дизассемблировав приложение, повозиться с такой головоломкой захочет не каждый...

    public String getSomeKey1() {
        return "5";
    }
    public String getSomeKey2() {
        long key[32];
    
        key[0] = 9; 
        key[2] = 55; 
        a = (key[0] + key[2]) * 3; 
        key[1] = (a % 10) + someFunc() * 99; 
        key[4] = (a / 10) * someFunc2() / someFunc3(); 
        if (someFunc4()) { 
            key[5] = someFunc5(); 
        } else { 
            key[5] = someFunc6(); 
        }
        key[6] = Integer.valueOf(getSomeKey1());
        key = process1(key);
        key[2] = getSomeKey3();
        // ...
        StringBuilder sb = new StringBuilder();
        for (long i: key) {
            sb.append(i);
        }
    
        return sb.toString();
    }
    public long[] process1(long[] key) {
        key[3] = (key[4] + key[5] + key[1]*2) / 5;
        key[1] = getSomeKey();
        // ...
    }
    public long getSomeKey3() {
        long a = 435345435;
        boolean b = false;
        while (!b) {
            b = true;
            for (i=2; i<(long)Math.sqr(a); i++) {
                if (a % i == 0) { 
                    b = false;
                    break;
                }
            }
            a++:
        }
        return a+10;
    }
    
    // Итоговый мастер-ключ получаем так:
    String masterKey = getSomeKey4() + getSomeKey2() + Integer.valueOf(getSomeKey1());
    Ответ написан
    2 комментария