Всем привет,
Я написал эту питона библиотеку, которая шифрует сообщения для конкретного Bitcoin открытого ключа конкретного открытого ключа. Содержание сообщения доказуемо от Bitcoin адреса отправителя. Он также скрывается как зашифрованный текст в пути. Только получатель Bitcoin адрес может расшифровать содержимое.
Вот как это работает.
секретный общий ключ между отправителем и получателем создаются следующим образом:
- отправитель скребущего Blockchain (или какой-либо другой источник) для открытого ключа получателя. Любая сделка подписал с pay_to_pubkey хэша показывает открытый ключ-адрес в. Я написал небольшую программу, царапанье этого ключа, если таковой имеется из сценариев транзакции, используя API Blockchain.info (хотя любой другой источник будет достаточно).
- Используя открытый ключ получателя, отправитель размножается, что точка на эллиптической кривой его секретного ключа (то есть целое представляет). Новая точка создается.
- координаты новосозданного Пункта карта в строку 32 байт, который является общим секретным ключом.
- В то же время отправитель передает свой открытый ключ в качестве части зашифрованного сообщения. Получатель использует свой секретный ключ для mulitply от общественной точки отправителя. Он должен поступить в той же точке, рассчитанной отправителем. Это снова сопоставляется с общим секретным ключом.
Затем я использую AES-CBC симметрично зашифровать содержимое сообщения, используя общий секретный ключ.
Наконец, временная метка включается в зашифрованном сообщении. Принятые сообщения действительны только в течение Х секунд после их создания отправителем. Это простой способ, чтобы ограничить ответные атаки короткого окна.
Это был мой первый набег в шифровании, так что я оценил бы обратную связь и исправления. Не использовать эту библиотеку в качестве готового продукта, так как он не был рассмотрен. Там вполне может быть вопиющие ошибки я пропустил. Я не профессиональный криптограф так ... взять его с зерном соли.