Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
15 июля 2011, 1:50:13 PM   # 1
 
 
Сообщения: 938
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Всем привет !

Это здесь :

UPD: смотрите следующий пост для новой версии (вероятно, более безопасно).

Pbwhatkey принимает 3 параметра:

 ./ Pbwhatkey your_passphrase your_salt number_of_iterations

Из этого входного скрипта генерирует секретный ключ, а затем показывает его и
 соответствующие Bitcoin адрес.
 
Монтаж :
1) Установить pbwhatkey (см пост ниже)
2) Скачать pywallet из
 https://github.com/joric/pywallet  версия 1.1 (не будет работать с V 1.0)
Место pywallet.py в той же директории

Запустить его: ./pb4 Korsaar over9000 66666
          или: питон PB4 Korsaar over9000 66666
Вывод должен быть:  

Секретный ключ для импорта: 5JPX6aZBM9NpVdRza6eYnJ1ofB76YL6bennLcZpBq6rB5mbvEYa
 
Bitcoin адрес: 1PQKsnY7N4jQhfRTgKx4j3xLkscYkm4fLS

Третий параметр должен быть достаточно большим, может быть выше 1000000 итераций.
(Проверено до 2200000)

Пароль и соль может быть в кодировке UTF-8 (хотя еще не проверено)

Испытано с Python 2.6, pbkdf2_rmd v 0.1 (Python модуль), pywallet V 1.1

Любые мысли или предложения?





Ukigo сейчас офлайн Пожаловаться на Ukigo   Ответить с цитированием Мультицитирование сообщения от Ukigo Быстрый ответ на сообщение Ukigo


Как заработать Биткоины?
Без вложений. Не майнинг.


16 июля 2011, 9:44:45 AM   # 2
 
 
Сообщения: 938
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

Получил 1806 Биткоинов
Реальная история.





Ну, вот версия 3

UPD: заменена версия 4. См пост ниже.


  



 
  
  
    
Ukigo сейчас офлайн Пожаловаться на Ukigo   Ответить с цитированием Мультицитирование сообщения от Ukigo Быстрый ответ на сообщение Ukigo

16 июля 2011, 9:51:41 AM   # 3
 
 
Сообщения: 938
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

Вам понадобится немного измененный мной модуль PBKDF2 Python.
Сохранить код ниже, как "pbkdf2_rmd.py" в той же директории с размещена выше
"PB3" скрипт.
Код:
#! / USR / бен / питон
# - * - кодирование: ASCII - * -
################################################## #########################
# PBKDF2 - PKCS # 5 v2.0 Password-Based Key Выведение
#
# Copyright (C) 2007-2011 Дуэйн С. Litzenberger
#
# Разрешать Настоящим предоставляется бесплатно, любому лицу, приобретающему
# Копию этого программного обеспечения и связанных с ними файлов документации (
# "Программного обеспечения"), Чтобы иметь дело в Программное обеспечение без ограничений, в том числе
# Без ограничения права на использование, копирование, изменение, объединение, публикацию,
# Распространять, лицензировать, и / или продавать копии программного обеспечения, и
# Разрешение лица, которым Программное обеспечение поставляется сделать это, при условии
# следующие условия:
#
# Приведенное выше уведомление об авторских правах и данное разрешение должно быть
# Включены во все копии или существенные части Программного обеспечения.
#
# ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ "КАК ЕСТЬ", БЕЗ КАКИХ,
# ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИИ
# КОММЕРЧЕСКОЙ ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И
# НЕПОСЯГАТЕЛЬСТВА. НИ ПРИ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ BE
# НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГИХ ОТВЕТСТВЕННОСТИ, В РЕЗУЛЬТАТЕ
# Договора, ДЕЛИКТА ИЛИ ИНАЧЕ, ВОЗНИКАЮЩИЕ ИЗ, ИЛИ В СВЯЗИ
# С SOFTWARE ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ В ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.
#
# Страна происхождения: Канада
#
################################################## #########################
# Пример PBKDF2 использование:
# От Crypto.Cipher импорта AES
# От PBKDF2 импорта PBKDF2
# Импорт ОС
#
# Соль = os.urandom (8) # 64-битная соль
# Ключ = PBKDF2 ("Это ключевая фраза является секретом.", Соль) .read (32) # 256-битный ключ
# IV = os.urandom (16) # 128-битный И.В.
# Шифра = AES.new (ключ, AES.MODE_CBC, внутривенно)
# ...
#
# Пример склепа () использование:
# Из PBKDF2 импорта склепа
# Pwhash = крипты ("секрет")
# Alleged_pw = raw_input ("Введите пароль: ")
# Если pwhash == крипты (alleged_pw, pwhash):
# Распечатать "Пароль хорошо"
# Еще:
# Распечатать "Неверный пароль"
#
################################################## #########################

__version__ = "0,1"
__all__ = [ 'PBKDF2_RMD', 'крипты']

от структуры импорта пакета
от случайного импорта randint
импорт строка
импорт SYS

пытаться:
    # Используйте PyCrypto (если таковые имеются).
    от Crypto.Hash импорта HMAC, SHA как SHA1, RIPEMD как RMD
кроме ImportError:
    Распечатать "Ошибка импорта: PyCrypto не установлен!"
    Выход (0)
    # PyCrypto не доступно. Используйте стандартную библиотеку Python.
# Импорт HMAC, как HMAC
# пытаться:
# От hashlib импорта sha1 как SHA1
# Кроме ImportError:
        # Hashlib не доступно. Используйте старый модуль ша.
# Импорт ша, как SHA1

#
# Python 2.1 через 3.2 совместимость
#

если sys.version_info [0] == 2:
    _0xffffffffL = длинный (1) << 32
    Защиту isunicode (ы):
        Возвращение isinstance (с, Unicode)
    Защиту isbytes (ы):
        Возвращение isinstance (с, ул)
    Защиту isinteger (п):
        Возвращение isinstance (п, (интермедиат, долго))
    Защиту б (ы):
        возвращение s
    Защиту binxor (а, б):
        вернуть "".join ([CHR (ORD (х) ^ Ord (у)) для (х, у) в почтовый индекс (а, б)])
    Защиту b64encode (данные, си ="+ /"):
        TT = string.maketrans ("+ /", Символы)
        вернуться data.encode ( 'base64'). заменить ("\ п", "") .translate (тт)
    от binascii импорта b2a_hex
еще:
    _0xffffffffL = 0xffffffff
    Защиту isunicode (ы):
        Возвращение isinstance (с, ул)
    Защиту isbytes (ы):
        Возвращение isinstance (s, байт)
    Защиту isinteger (п):
        Возвращение isinstance (п целое)
    Защиту отозваны (объект):
        вернуть hasattr (объект, '__call__')
    Защиту б (ы):
       вернуться s.encode ("латино-1")
    Защиту binxor (а, б):
        вернуть байты ([х ^ у для (х, у) в почтовый индекс (а, б)])
    из base64 импорта b64encode как _b64encode
    Защиту b64encode (данные, си ="+ /"):
        если isunicode (символы):
            Возвращение _b64encode (данные, chars.encode ( 'UTF-8')). декодировать ( 'UTF-8')
        еще:
            Возвращение _b64encode (данные, символы)
    от binascii импорта b2a_hex как _b2a_hex
    Защиту b2a_hex (ы):
        вернуться _b2a_hex (s) .decode ( 'US-ASCII')
    xrange = диапазон

Класс PBKDF2_RMD (объект):
    """PBKDF2.py: PKCS # 5 v2.0 Password-Based Key Выведение

    Эта реализация занимает ключевую фразу и соль (и необязательно
    счетчик цикла, модуль дайджеста и модуль MAC), и обеспечивает
    файл-подобный объект, из которого ключ произвольно размера может быть прочитан.

    Если ключевая фраза и / или соли являются Юникодом объектов, они кодируются как
    UTF-8, прежде чем они будут обработаны.

    Идея PBKDF2 заключается в получении криптографического ключа от
    ключевая фраза и соль.

    PBKDF2 также может быть использован в качестве сильного соленого хэша пароля.
    «Крипта» функция предусмотрена для этой цели.

    Помните: ключи, сгенерированные с помощью PBKDF2 только так сильны, как
    ключевые фразы они получены из.
    """

    Защиту __init __ (самоповреждения, PassPhrase, соль, итераций = 1000,
                 digestmodule = ДУЗ, macmodule = HMAC):
        само .__ macmodule = macmodule
        само .__ digestmodule = digestmodule
        self._setup (ключевая фраза, соль, Итерация, self._pseudorandom)

    Защиту _pseudorandom (я, ключ, сбщ):
        """Псевдослучайной функции. например HMAC-SHA1"""
        Самовозврат .__ macmodule.new (ключ = ключ, сообщ = тзд,
            digestmod = само .__ digestmodule) .digest ()

    Защита чтения (я, байты):
        """Прочитайте заданное число байтов ключа."""
        если self.closed:
            поднять ValueError ("файл-подобный объект закрыт")

        Размер = Len (само .__ ЬиЕ)
        блоки = [само .__ ЬиЕ]
        я = само .__ blockNum
        в то время как размер < байт:
            I + 1 =
            Если я > _0xffffffffL или я < 1:
                # Мы могли бы вернуться "" здесь, но
                поднять OverflowError ("выведенный ключ слишком долго")
            Блок = Автономный .__ F (я)
            blocks.append (блок)
            площадь + = Len (блок)
        ЬиЕ = B ("") .join (блоки)
        RetVal = ЬиЕ [: байт]
        само .__ ЬиЙ = ЬиЙ [байты:]
        само .__ blockNum = я
        возвращение RetVal

    Защиту __f (я, я):
        # Я должен вписываться в 32 бит
        утверждать 1 <= я <= _0xffffffffL
        U = само .__ ч.р.ф. (само .__ ключевой фразы, само .__ соли + упаковка ("! L", Я))
        Результат = U
        для J в xrange (2, 1 + я) .__ итераций:
            U = само .__ ч.р.ф. (само .__ ключевой фразы, U)
            Результат = binxor (результат, U)
        возвращаемый результат

    Защиту hexread (самость, октет):
        """Прочитайте заданное число октетов. Верните их в шестнадцатеричном формате.

        Обратите внимание, что Len (obj.hexread (п)) == 2 * N.
        """
        вернуться b2a_hex (self.read (октетов))

    Защиту _setup (самость, ключевая фраза, соль, Итерация, PRF):
        # Sanity проверки:

        # Ключевая фраза и соль должны быть Обл или юникода (в последнем
        # Случай, мы преобразуем в UTF-8)
        если isunicode (ключевая фраза):
            ключевая фраза = passphrase.encode ("UTF-8,")
        Элиф не isbytes (фраза):
            поднять TypeError ("ключевая фраза должна быть Обл или юникода")
        если isunicode (соль):
            соль = salt.encode ("UTF-8,")
        ELIF не isbytes (соль):
            поднять TypeError ("соль должны быть ул или Юникода")

        # итерации должны быть целым числом >= 1
        если не isinteger (итераций):
            поднять TypeError ("Итерации должны быть целым числом")
        если итераций < 1:
            поднять ValueError ("Итерации должны быть по крайней мере 1")

        # Ч.р.ф. должны быть отозваны
        если не отозван (PRF):
            поднять TypeError ("ч.р.ф. должен быть отозван")

        самостоятельно .__ ключевая фраза = ключевая фраза
        Селф .__ соль = соль
        само .__ итерации = итерации
        само .__ ч.р.ф. = ч.р.ф.
        самостоятельно .__ blockNum = 0
        самостоятельно .__ BUF = B ("")
        self.closed = False

    Защита близко (Я):
        """Закройте поток."""
        если не self.closed:
            дель самостоятельная .__ ключевой фразы
            дель Селф .__ соль
            дель самоуправления .__ Итерации
            дель самоуправления .__ ч.р.ф.
            дель самоуправления .__ blockNum
            дель самоуправления .__ ЬиЕ
            self.closed = True

Защита склеп (слово, соль = None, Итерации = None):
    """PBKDF2 на основе Unix крипта (3) замены.

    Число итераций, указанных в соли перекрывает «» итераций
    параметр.

    Эффективная длина хэша составляет 192 бит.
    """

    # Генерация (псевдо-) случайная соль, если пользователь не предоставил.
    если соль не None:
        соль = _makesalt ()

    # Соль должна быть строка или US-ASCII подмножество Юникода
    если isunicode (соль):
        соль = salt.encode ( 'US-ASCII'). декодировать ( 'US-ASCII')
    Элиф isbytes (соль):
        соль = salt.decode ( 'US-ASCII')
    еще:
        поднять TypeError ("соль должна быть строка")

    # Слово должно быть строкой или юникода (в последнем случае, мы преобразуем в UTF-8)
    если isunicode (слово):
        слово = word.encode ("UTF-8,")
    Элиф не isbytes (слово):
        поднять TypeError ("Слово должно быть строкой или юникода")

    # Попробуйте извлечь реальную соль и итерационное количество из соли
    если salt.startswith ("$ P5k2 $"):
        (Итерации, соль, фиктивные) = salt.split ("$") [2: 5]
        если итерации == "":
            Итерации = 400
        еще:
            Преобразованные = INT (итерации, 16)
            если итерации! = "%Икс" % Конвертировано: # строчных шестигранные, минимальные цифры
                поднять ValueError ("Invalid соль")
            Итерации = конвертированы
            если нет (итераций >= 1):
                поднять ValueError ("Invalid соль")

    # Убедитесь, что соль соответствует разрешенному набору символов
    разрешено = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"
    для ч в соли:
        если ч не допускается:
            поднять ValueError ("Недопустимый символ% г соли" % (Ч))

    если итерации None или итерация == 400:
        Итерации = 400
        соль = "$ P5k2 $$" + соль
    еще:
        соль = "$ P5k2 $% х $% s" % (Итерации, соль)
    rawhash = PBKDF2_RMD (слово, соль, Итерация) .read (24)
    обратная соль + "$" + B64encode (rawhash, "./")

# Добавить крипту как статический метод класса PBKDF2
# Это делает его легче сделать "от PBKDF2 импорта PBKDF2" и до сих пор используют
# Крипты.
PBKDF2_RMD.crypt = STATICMETHOD (крипты)

Защиту _makesalt ():
    """Возвращение 48-битную псевдослучайную соли в течение крипты ().

    Эта функция не подходит для генерации криптографических секретов.
    """
    binarysalt = Ь ("") .join ([упаковка ("@ЧАС", Randint (0, 0xFFFF)) для г в диапазоне (3)])
    вернуться b64encode (binarysalt, "./")

# ВИМ: установить TS = 4 SW = 4 петли = 4 expandtab:
#

Этот модуль реализует алгоритм HMAC-ripemd160.
Вероятно, безопаснее, чем HMAC-SHA1 в очень хорошем PBKDF2
Модуль по Дуэйн Litzenberger.
Ukigo сейчас офлайн Пожаловаться на Ukigo   Ответить с цитированием Мультицитирование сообщения от Ukigo Быстрый ответ на сообщение Ukigo

16 июля 2011, 10:26:13 AM   # 4
 
 
Сообщения: 938
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

С "PB4" Вы можете легко регенерируют потерянного с разбитой резервного копирования закрытого ключа
в будущем.
Просто держать в строжайшей тайне свои 3 Params. Хорошо для экономии.

Кроме того, вы можете настроить "PB4" Сценарий и как результат вы будете иметь свой

личный уникальный ключ генератор. Никто не сможет создать свои ключи.

Это как 3-фактор аутентификация. Атакующий должен знать все ваши Params
 воссоздать свой ключ, а затем тратить деньги.

Добавить. если число итераций BIG достаточно плохой парень будет тратить много ресурсов
пытаясь перебором. Довольно экспансивный для него.
Ukigo сейчас офлайн Пожаловаться на Ukigo   Ответить с цитированием Мультицитирование сообщения от Ukigo Быстрый ответ на сообщение Ukigo

19 июля 2011, 12:10:05 PM   # 5
 
 
Сообщения: 140
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

Эта программа, как представляется, работать точно так, как рекламируется. Это дает хорошие, повторяемые государственные / частные пары ключей выхода из паролей с использованием стандартного, хорошо рассматривать алгоритм. Престижность на переход на Python, это так легко читать код, а функции base58 элегантны и понятно!

В любом случае, запоминая закрытый ключ 51-символьный громоздко, но я буду утверждать, что сильный пароль сравнимой безопасности может быть чуть больше половины до тех пор, и гораздо легче запомнить. Что, кроме резервного копирования, было бы действительно здорово в низкотехнологичных ситуациях, когда не могут быть сохранены бумажник файлы и все физические представления ключей.
samr7 сейчас офлайн Пожаловаться на samr7   Ответить с цитированием Мультицитирование сообщения от samr7 Быстрый ответ на сообщение samr7

19 июля 2011, 2:24:48 PM   # 6
 
 
Сообщения: 938
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

2 samr7:
 Еще раз спасибо за вашу идею и предложения о PBKDF2!
  Я тоже очень рад, что вся задача теперь делается на одном языке
 без труб и уловок предыдущего раствора (ukbx).
 Base58 процедуры не мои. Я беру их от кого-либо проекта.
 Так что это действительно коллективная работа)
 
 Для меня самым важным результатом является то, что теперь я могу переместить свои сбережения
 мои новое ремонтируемых адресов. Сломанное резервное копирование не угроза больше.


 
Ukigo сейчас офлайн Пожаловаться на Ukigo   Ответить с цитированием Мультицитирование сообщения от Ukigo Быстрый ответ на сообщение Ukigo

19 июля 2011, 3:53:27 PM   # 7
 
 
Сообщения: 140
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

На второй мысли, есть одна деталь об этой программе, что беспокоит меня.

Она устанавливает функцию PBKDF2 и считывает 16 байт в виде шестнадцатеричной кодировки строки.

Код:
    TopSec = PBKDF2_RMD (hashlib.sha512 (sys.argv [1]). hexdigest (), соль, Int (sys.argv [3])). hexread (16)

Затем он передает строку в pywallet целого преобразователя. Я думаю, что вы имели в виду, чтобы сделать с этим считывается 32 байта некодированных данных из функции PBKDF2:

Код:
    TopSec = PBKDF2_RMD (hashlib.sha512 (sys.argv [1]). hexdigest (), соль, Int (sys.argv [3])). чтения (32)

и в то время как следующая строка больше не будет иметь возможность печатать необработанный закрытый ключ без str.encode ( «шестигранной»), то str_to_long, по крайней мере, получить полные данные ключа. Как она стоит сейчас, похоже, что он использует в ASCII шестнадцатеричную строку в качестве исходного секретного ключа, который обеспечит около половины ожидаемого уровня безопасности.
samr7 сейчас офлайн Пожаловаться на samr7   Ответить с цитированием Мультицитирование сообщения от samr7 Быстрый ответ на сообщение samr7

20 июля 2011, 4:12:47 AM   # 8
 
 
Сообщения: 938
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

Как я понимаю, это:
"TopSec" НЕ сам секретный ключ, но "секретный множитель" используя для создания закрытого ключа.
 См pywallet исходного кода.
 
 Предыдущая неопубликованная версия "пб" (Работа с pywallet v1.0, которые имеют различный API)
 просто создает 32-значное шестнадцатеричное, а затем использует его в качестве ключа.

 С pywallet v 1.1 это не может быть сделано, поэтому я решил создать секретный множитель из входных Params.
 Но, может быть, вы правы, и предложенные изменения будут увеличить пространство ключей много.

Я не уверен, сколько цифр секретного множителя должен быть?!
 
Ukigo сейчас офлайн Пожаловаться на Ukigo   Ответить с цитированием Мультицитирование сообщения от Ukigo Быстрый ответ на сообщение Ukigo

20 июля 2011, 4:24:17 AM   # 9
 
 
Сообщения: 938
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

версия 4 для тестирования:
Код:
#! / USR / бен / питон

# Copyright (с) 2011, Ukigo

# ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ АВТОРСКИХ ПРАВ И УЧАСТНИКИ
# "КАК ЕСТЬ" И ЛЮБЫЕ ЯВНЫЕ ИЛИ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ
# ЛИМИТЕД, ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ ПРИГОДНОСТИ ДЛЯ ПРОДАЖИ И
# КОНКРЕТНОЙ ЦЕЛИ. НИ ПРИ ОБСТОЯТЕЛЬСТВАХ АВТОРСКИХ
# ДЕРЖАТЕЛЬ ИЛИ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ПРЯМОЙ, КОСВЕННЫЙ,
#, ШТРАФНЫЕ ИЛИ КОСВЕННЫЕ УБЫТКИ (ВКЛЮЧАЯ, НО НЕ
# ЛИМИТЕД, ПРИОБРЕТЕНИЕ ТОВАРОВ ЗАМЕНЫ ИЛИ УСЛУГ; ПОТЕРЯ
# ДАННЫХ ИЛИ ПРИБЫЛИ; ИЛИ ПРЕРЫВАНИЕ) ОДНАКО ВЫЗВАННЫЕ И В ЛЮБОЙ
# ТЕОРИИ ОТВЕТСТВЕННОСТИ, будь то контракт, СТРОГОЙ ОТВЕТСТВЕННОСТИ, ИЛИ ПРАВОНАРУШЕНИЯ
# (ВКЛЮЧАЯ ХАЛАТНОСТЬ), ВОЗНИКАЮЩИЕ ИЗ ИСПОЛЬЗОВАНИЯ
# ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.


использование = """             Использование: ./pb4 your_passphrase your_salt number_of_iterations

                        Пример: ./pb4 + Windfall денег *. Конфеты +] 777777 """


от pbkdf2_rmd импорта PBKDF2_RMD
импорт ОС, SYS, hashlib
от hashlib импорта SHA256
импорт pywallet в pyw
optparse импорт # с OptionParser

b58_digits = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'

Защиту base58_encode (п):
    л = []
    в то время как п > 0:
        п, г = divmod (п, 58)
        l.insert (0, (b58_digits [г]))
    Возвращение '' .join (л)

Защиту base58_decode (ы):
    п = 0
    для ч в с:
        п * = 58
        цифра = b58_digits.index (ч)
        п + = цифра
    вернуться п

Защита dhash (ы):
    вернуть SHA256 (sha256 (ы) .digest ()). дайджеста ()

Защиту convert_privkey_to_base58 (ы):
    контрольная сумма = dhash ( '\ x80' + з) [: 4]
    вернуться base58_encode (
        Int ( '0x80' + (S + контрольная сумма) .encode ( 'hex_codec'), 16)
        )

Защита основные ():

    пытаться:
        если sys.argv [1] ("Помогите", "-час", "-Помогите","--Помогите"):
            Распечатать " "
            использование печати
            Выход (0)
        если Int (sys.argv [3]) < 60001:
            Распечатать " "
            Распечатать "Количество итераций должно быть > 60000 (лучше использовать > 1'000'000)"
            Выход (0)

    кроме IndexError:
        Распечатать " "
        использование печати
        Выход (0)

    Распечатать " "
    Распечатать "    Пожалуйста, подождите. Генерация ключей ..."
    соль = hashlib.sha512 (sys.argv [2]). hexdigest ()
    Распечатать " "
    Распечатать "Пароль был: ", Sys.argv [1]

    TopSec = PBKDF2_RMD (hashlib.sha512 (sys.argv [1]). hexdigest (), соль, Int (sys.argv [3])). чтения (32)
    #Распечатать "                .................................................. ............"
    Распечатать "Секретный множитель: ", Topsec.encode ("наговор")

    
    
    Распечатать " "
    

    секрет = pyw.str_to_long (TopSec)
    ЭКЕЙ = pyw.EC_KEY (секрет)
    Паб = pyw.GetPubKey (ЭКЕЙ)
    собств = pyw.GetPrivKey (ЭКЕЙ)
    priv_base58 = pyw.SecretToASecret (pyw.PrivKeyToSecret (собств))


    Распечатать "Секретный ключ для импорта: ", priv_base58
    

    Распечатать " "
    Распечатать "Bitcoin адрес:  "+ Pyw.public_key_to_bc_address (паб)
    Распечатать " "
    Выход (0)

если __name__ == '__main__':
    главный()
Ukigo сейчас офлайн Пожаловаться на Ukigo   Ответить с цитированием Мультицитирование сообщения от Ukigo Быстрый ответ на сообщение Ukigo

20 июля 2011, 4:48:59 AM   # 10
 
 
Сообщения: 140
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

Как я понимаю, это:
"TopSec" НЕ сам секретный ключ, но "секретный множитель" используя для создания закрытого ключа.
 См pywallet исходного кода.

Это правда, что TopSec это не то же самое, как pywallet private_key. Однако секретный ключ EC просто большое целое число от 0 до порядка группы, и можно было бы предположить, ваше намерение состоит в том, чтобы использовать TopSec в качестве этого значения.

Действительно секрет и secret_multiplier из кода pywallet именно закрытый ключ EC. Акт умножения генератора (точка) тайным (целое) производит открытый ключ EC (точка).

котировка
Я не уверен, сколько цифр секретного множителя должен быть?!

Это длиной 32 байта. Самая большая полезная ценность один меньше, чем: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

Кстати, новая версия выглядит намного лучше!
samr7 сейчас офлайн Пожаловаться на samr7   Ответить с цитированием Мультицитирование сообщения от samr7 Быстрый ответ на сообщение samr7

20 июля 2011, 6:16:38 AM   # 11
 
 
Сообщения: 938
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

Виноват ! Ты прав !
 Эти эллиптические кривые создают хаос в моей усталой голове)



Ukigo сейчас офлайн Пожаловаться на Ukigo   Ответить с цитированием Мультицитирование сообщения от Ukigo Быстрый ответ на сообщение Ukigo

25 августа 2011, 11:21:55 PM   # 12
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

Поэтому я возрождает старую нить здесь, но я заинтересован в несколько ином применении детерминированной генерации ключей. Это похоже на то, что может интегрировано с pywallet очень легко. Я уверен, что я не первый человек, чтобы предположить, что это, но я не найти другие темы об этом.

Вместо того чтобы использовать пароли детерминировано генерировать ключ, я хотел бы использовать генератор случайных чисел, чтобы создать 256-битный секретный ключ-генератор один раз. Этот генератор будет первым закрытый ключ, GenKey, а затем вы получите полубесконечный последовательность новых ключей просто следующим образом:

Код:
PrivKey [+ 1] = hash256 (GenKey исключающее PrivKey [I]);

Вам не нужен будет ключ растяжки (по крайней мере, это то, что я предполагаю, что итерации для в модуле PBKDF2), потому что вы используете полную энтропию в оригинальном ключе. Используя эту технику, вам нужно всего лишь сделать резервную копию вашего бумажника один раз.  Конечно, она связывает все ваши адреса вместе, но 99% время с текущим кошельком, если злоумышленник получает один ключ, он получает все из них, так или иначе. И с помощью GenKey в каждой итерации, даже если злоумышленник получает PrivKey (I), он не может определить, какой-либо из других ключей. Моя основная мотивация является то, что я хочу, чтобы иметь возможность поставить свою GenKey в QR-код и храните его в сейфе, а потом я никогда не придется беспокоиться о потере своих закрытых ключей.  

С текущим бумажнике, я получаю только пул 100 ключей, и придется заново резервное копирование мой кошелек каждый раз, когда я бегу.
etotheipi сейчас офлайн Пожаловаться на etotheipi   Ответить с цитированием Мультицитирование сообщения от etotheipi Быстрый ответ на сообщение etotheipi

26 августа 2011, 4:35:14 AM   # 13
 
 
Сообщения: 938
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

Поэтому я возрождает старую нить здесь, но я заинтересован в несколько ином применении детерминированной генерации ключей. Это похоже на то, что может интегрировано с pywallet очень легко. Я уверен, что я не первый человек, чтобы предположить, что это, но я не найти другие темы об этом.

Вместо того чтобы использовать пароли детерминировано генерировать ключ, я хотел бы использовать генератор случайных чисел, чтобы создать 256-битный секретный ключ-генератор один раз. Этот генератор будет первым закрытый ключ, GenKey, а затем вы получите полубесконечный последовательность новых ключей просто следующим образом:

Код:
PrivKey [+ 1] = hash256 (GenKey исключающее PrivKey [I]);

Вам не нужен будет ключ растяжки (по крайней мере, это то, что я предполагаю, что итерации для в модуле PBKDF2), потому что вы используете полную энтропию в оригинальном ключе. Используя эту технику, вам нужно всего лишь сделать резервную копию вашего бумажника один раз.  Конечно, она связывает все ваши адреса вместе, но 99% время с текущим кошельком, если злоумышленник получает один ключ, он получает все из них, так или иначе. И с помощью GenKey в каждой итерации, даже если злоумышленник получает PrivKey (I), он не может определить, какой-либо из других ключей. Моя основная мотивация является то, что я хочу, чтобы иметь возможность поставить свою GenKey в QR-код и храните его в сейфе, а потом я никогда не придется беспокоиться о потере своих закрытых ключей.  

С текущим бумажнике, я получаю только пул 100 ключей, и придется заново резервное копирование мой кошелек каждый раз, когда я бегу.

Ваша идея на мой взгляд, ближе к детерминированным кошельками.
Идите вперед, быть первым, чтобы произвести реальный код таким образом.
Показать it.People будет критиковать свой подход.
Может быть что-то интересное будет рождаться.

Кроме того, я уверен, что сейфы не так уж SAFE в настоящее время.
Сохраняя свои секреты есть вы просто обменять один риск к другому.
Ukigo сейчас офлайн Пожаловаться на Ukigo   Ответить с цитированием Мультицитирование сообщения от Ukigo Быстрый ответ на сообщение Ukigo

26 августа 2011, 4:51:57 AM   # 14
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)

Да, это детерминированный кошелек. Оглядываясь назад, я понимаю, это точно не цель этого оригинального поста, но это связано. Pywallet является идеальным инструментом для включения этой техники. Интерфейс командной строки будет выглядеть следующим образом:

   
Код:
./pywallet.py --create детерминированным кошелек --generator ключ = random256bit.bin --numkeys 10000 -o wallet.dat

Это будет вычислить первые 10000 ключей, основанных на генераторе, и добавить их в ключевой пул в wallet.dat. Если вы бежите из ключей, вы можете повторно запустить с большим числом, и это добавит новые ключи к нему. Возможно, это в конечном счете может быть включено в клиенте, так что вы никогда не должны запустить что-нибудь: просто создать свой генератор-ключ один раз, обратно его вверх, и клиент будет создавать бесконечные ключи от него.

Вы не должны быть элегантными об идее ... это просто предложение, и вы, ребята, очень короткий пути от того, что позволило с помощью pywallet.py. Если вам не нравится это, давайте дискуссию о том, что проблемы, которые она может иметь и как они могут быть решены.

Кроме того, я не знаю, почему вы бы вопрос безопасности сейфов, но это было не в этом вообще. Люди хотят, чтобы иметь возможность сделать резервную копию своего кошелька один раз и знаю, что они всегда есть резервная копия где-то они считают безопасными в случае их жесткий диск выйдет из строя. При нынешних кошельках, они должны сделать резервную копию каждые 100 транзакций. Кроме того, нет никакого предупреждения, когда их ключевой пул истощается, поэтому существует риск использования не-зарезервированные ключи, не осознавая этого. Этот детерминированный кошелек решает много проблем, и я не вижу, где пониженная безопасность.



etotheipi сейчас офлайн Пожаловаться на etotheipi   Ответить с цитированием Мультицитирование сообщения от etotheipi Быстрый ответ на сообщение etotheipi

26 августа 2011, 6:02:03 AM   # 15
 
 
Сообщения: 938
Цитировать по имени
цитировать ответ
по умолчанию Re: Pbwhatkey - детерминированный генератор закрытого ключа (PBKDF2 pywallet.py основе)


Вы не должны быть элегантными об идее ... это просто предложение, и вы, ребята, очень короткий пути от того, что позволило с помощью pywallet.py. Если вам не нравится это, давайте дискуссию о том, что проблемы, которые она может иметь и как они могут быть решены.
Мне нравится ваша идея, но лично нет времени, чтобы попытаться реализовать его прямо сейчас.
Дьявол всегда в деталях. Только после того, как мы будем иметь эталонную реализацию, мы увидим его уши.
Или не увидит
котировка
Кроме того, я не знаю, почему вы бы вопрос безопасности сейфов, но это было не в этом вообще.
 
Я только имею в виду, что если вы потеряете каким-то образом (банк обанкротился или ограбят, бунты или другое событие) резервного копирования помещается в сейфе вы будете в огромной беде.
Ukigo сейчас офлайн Пожаловаться на Ukigo   Ответить с цитированием Мультицитирование сообщения от Ukigo Быстрый ответ на сообщение Ukigo



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW