2014-02-11 3 views
8

Я использовал Stanford Javascript Crypto Library (SJCL) для симметричного шифрования AES (на основе примеров на их демонстрационной странице). Однако у меня есть дополнительное требование для создания пары ключей, шифрования данных с открытым ключом и дешифрования данных с помощью закрытого ключа. Некоторые из названий классов предполагают, что это возможно в SJCL, но мне было интересно, сможет ли кто-нибудь помочь с примером того, как это делается. На этом этапе я не занимаюсь хранением секретных ключей, просто созданием в памяти и использованием пары открытого/закрытого ключа.Как реализовать криптографию public/private key в SJCL?

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

+3

В общем просто генерируя/частная пара открытый ключ не то, что полезно. Проблема в том, что вам нужно установить доверие к открытому ключу. Этот вопрос очень близок к тому, чтобы быть вне темы, поскольку запрос образца кода или библиотеки считается безразличным (покажите, что вы пробовали сами, ваша поисковая система так же хороша, как наша). –

+0

Соответствующая статья: http://blogs.msdn.com/b/ericlippert/archive/2011/09/27/keep-it-secret-keep-it-safe.aspx – ntoskrnl

ответ

-3

Согласно Symmetric Cryptography in Javascript, нет упоминания о криптографии с открытым ключом. Поэтому он не поддерживается.

Есть, вероятно, некоторые доступные варианты разломов, но я не знаю ничего с головы. Кажется, у Github есть выбор: javascript public key crypto site:github.com.

WebCrypto Working Group сейчас работает над проблемой. Он будет иметь подготовку, создание ключей, хранение ключей и некоторые операции с открытым ключом, такие как seal и sign. Первая ревизия не имеет богатое предложение Диффи-Хелмана или примитивного, как BigIntger. См., Например, Question on BigInteger operations.

+0

Чтобы процитировать что-то, что я читал в другом месте: [Ваш ответ находится в другом замке: когда ответ не ответ?] (https: //meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-answer-not-an-answer) и [Являются ли ответы только с ответами плохой практикой?] (https: // meta. stackexchange.com/questions/65277/are-link-only-answers-poor-practice) –

7

Фактически можно реализовать частное/общедоступное шифрование с использованием модуля ECC. Если вы являетесь профессионалом, вы можете проверить документацию api по адресу http://bitwiseshiftleft.github.io/sjcl/doc/.

Если вы хотите пример того, как его сделали, вы можете пройти через

http://justinthomas.pro/crypto/test.html http://justinthomas.pro/crypto/ хранилище URL

Вы можете увидеть реализацию SJCL ECC в действии здесь (генерация ключа в комплекте)

Также это может быть полезно https://github.com/bitwiseshiftleft/sjcl/issues/134

PS Криптография с эллиптической кривой (ECC) - это подход к криптографии с открытым ключом, основанный на алгебраической структуре эллиптических кривых над конечными полями. 256-битный ECC открытый ключ должен обеспечить сравнимую безопасность 3072-битный RSA с открытым ключом http://en.wikipedia.org/wiki/Elliptic_curve_cryptography

+0

Ссылки на 'justinthomas.pro' теперь мертвы. – Amy

3

Похоже, они недавно выпустили это (примерно через год после того, как ваш первоначальный пост), но это дает учебник о том, как сделать ассиметричную криптографию

https://github.com/bitwiseshiftleft/sjcl/wiki/Asymmetric-Crypto

Смежные вопросы