Я работаю на сайт, который будет * только * использовать Bitcoin для средств торговли.
Я пишу код сам, потому что - эй, это весело - но и потому, что это форма безопасности через неизвестность. Чем меньше мои кодовый имеет общего с другими сайтами, тем менее вероятно, годный для использования недостатка в другом месте будет работать с моим. Но в основном я делаю это потому, что я упрямый, я был в PHP начиная с PHP 3.x дней, и я не поклонник большинства современных стилей кодирования. И слишком многие существующие проекты вообще не получают основное право безопасности (например, используя подготовленные заявления - я обвиняю MySQL для этого, так как она не поддерживает их обратно, когда лампа первой стала популярной)
Для отслеживания покупок клиента, я буду с уникальным публичный адрес, но я использую генератор, а не случайным образом. В частности -
Код:
$ Серии = 00;
$ Соль = 'gd74dj @ #% ^ 1ldidst';
$ Фраза = «Мне нравится мой автомобиль быстро и мои женщины быстрее»;
$ Соль = 'gd74dj @ #% ^ 1ldidst';
$ Фраза = «Мне нравится мой автомобиль быстро и мои женщины быстрее»;
Идея в том, чтобы сформировать ряд клавиш на несвязного машины, импорт публичных адресов в PostgreSQL на веб-сервере.
Когда я начинаю иссякать по адресам, увеличивают серии и регенерации.
Соль мне нужно создать резервную копию, фразу, что нужно помнить, и, таким образом, я могу регенерировать из соли, серии и фраз по мере необходимости.
Теперь поколение ключей -
Код:
$ Соль = md5 ($ соль). // подушечка соль
$ Остановка = 65536; // 256 ^ 2
для ($ I = 0; $ я<$ Остановки; $ я ++) {
$ Строки = $ соли. $ Фраза. $ Серии. int2hex ($ я);
$ Хеш = хэш ( 'ripemd160', $ строка);
$ Строки = $ соли. $ Хэш;
$ Хеш = хэш ( 'sha256', $ строка);
$ PrivateKey = strtoupper ($ хэш);
$ PublicAddress = genPublicAddress ($ PrivateKey);
печать ($ PrivateKey. "\ т" , $ PublicAddress. "\ П \ п");
}
$ Остановка = 65536; // 256 ^ 2
для ($ I = 0; $ я<$ Остановки; $ я ++) {
$ Строки = $ соли. $ Фраза. $ Серии. int2hex ($ я);
$ Хеш = хэш ( 'ripemd160', $ строка);
$ Строки = $ соли. $ Хэш;
$ Хеш = хэш ( 'sha256', $ строка);
$ PrivateKey = strtoupper ($ хэш);
$ PublicAddress = genPublicAddress ($ PrivateKey);
печать ($ PrivateKey. "\ т" , $ PublicAddress. "\ П \ п");
}
int2hex преобразует целое число в шестнадцатеричную записи с обивкой 0 'при необходимости 0000 - FFFF
genPublicAddress использует bcmath_Utils и связанные классы для создания base58 публичного адреса из сгенерированного ключа.
Сейчас в тестировании я просто иметь его распечатать результаты, так что я могу проверить результаты через http://gobittest.appspot.com/Address но в конце концов он будет вставить секретный ключ, серия и публичный адрес в таблицу - идея которого я запросить таблицу для всех общественных организаций, связанных с серией и сделать вставку для веб-сервера для использования с корзиной.
Затем в конце дня / недели / все, что я могу запросить веб-сервер для общественных организаций, подтвердивших сделки, и принять этот список для офф-лайн машины с базой данных закрытых ключей и запросов для связанных закрытых ключей, импорт в бумажник и улыбка ,
В основном то, что я ищу это критические замечания по моему поколению частных ключей. Значит ли это выглядеть нормально или мне нужно сделать больше шагов до окончательного SHA256 хэша?
Я думаю, что добавление соли к ripemd160 хэш и хеширования, что достаточно того, что я не придется беспокоиться о ком-то намеренно создавая столкновения, но я оценил бы ввод других с опытом работы в этой области.
Во-вторых, я хочу, чтобы убедиться, что sha256 хэш будет на самом деле привести к действительным закрытым ключом. Все документы, которые я читал, казалось, показывают 64 символов шестигранной был единственным ограничением, но я просто хочу, чтобы убедиться, что там нет некоторых зарезервированных диапазонов или что-то мне нужно остерегаться.
благодаря