Прежде всего, извините эта идея формируется только после того, как патч рабочего шифрования был уже разработан, но я считаю, что следующая схема будет идеальным для шифрования кошельков.
Существует один бумажник широкий мастер-ключ, сам по себе симметрично зашифрован (AES-CBC-256) с идентификационной фразы. Мы используем шифрование с открытым ключом здесь, чтобы шифрование бумажника privkeys без знания парольной фразы, требуя при этом кодовую фразу для их расшифровки.
Единственное место в источнике, где необходимы реальные частные ключи, это во время подписания. Это означает, что только для этой операции потребовалась бы ключевая фраза. Новые ключи могут быть сгенерированы и сохранены без пароля.
Он не может иметь смысл криптографический, но так как N-разрядное EC криптография предлагает только N / 2 бита безопасности, я предложил бы использовать более сильный кривой, чем secp256k1 ("только" 128 бит безопасности) - скажем secp384r1 - для мастер-шифрования.
Таким образом, за весь кошелек мастер secp384r1 пар ключи должны храниться - Публичный в открытом виде, в privkey зашифрован. При использовании сжатия точки и только хранение частному сам параметр, который требует 49 байт + 48 байт на каждую ключевую фразу.
Каждый walletkey затем, будут зашифрованы с использованием отдельного 256-битного AES ключа, полученного с помощью ECDH из главного ключа и каждого walletkey эфемерного ключа secp384r1 (= ИС-IES). В IV может быть использован хэш Публичных. Так как мы в любом случае обновление формата бумажника, можно сразу перейти только хранить частный параметр бумажника privkey (32 байта) вместо полного OpenSSL-кодированном виде (279 байт). Нам нужно будет добавить Публичную часть эфемерного ключа, хотя, добавляя 49 байт (при использовании сжатия точки). Таким образом, шифрованный бумажник privkeys можно хранить, используя 81 байт для каждого ключа.
Преимущества:
* ключи могут быть созданы и хранятся в зашифрованном виде, не зная кодовую фразу
* Множественные ключевые фразы могут присутствовать в одном бумажнике (за счет хранения частного мастер-ключ более одного раза)
* Изменение ключевой фразы тривиальна
* закрытые ключи могут оставаться в зашифрованном виде в памяти, расшифровывая их только при создании транзакции
* В сочетании с переходом на более эффективное представление закрытых ключей и используя сжатие точки, требования для хранения / памяти для закрытых ключей все еще идут вниз фактор 3
Вопросов:
* Является ли это криптографический звук?
* Имеет ли смысл использовать большую кривую EC для главного ключа / шифрования самого privkeys?
* Является ли использовать сжатие точек варианта? Я слышал, есть патенты на него, но он реализован в OpenSSL. Если нет, то главный ключ потребует 97 байт + 48 байт на каждую ключевую фразу, и бумажник privkeys потребуется 129 байт.