заставьте Firefox дешифровать использующую частную часть клиентского сертификата

Я интересуюсь наличием чего-то, что я шифрую использование открытого ключа на сервере LAMPhp, дешифрованное использование соответствующего закрытого ключа на веб-клиенте (Firefox, по крайней мере, лучше всего если это - стандартный JavaScript),

Обратите внимание, что то, что я хочу сделать, - не просто, чтобы иметь зашифрованное соединение с помощью SSL/https. Или даже использовать клиентские сертификаты на базе браузера в качестве метода входа в систему/управления доступом. Я знаю, как сделать обе из тех вещей. То, что я хочу сделать, больше похоже на пользование электронной почтой с gpg ключами. Я хочу смочь создать короткое сообщение, что я зашифрую с пользовательским открытым ключом, что - только они - могут дешифровать использование их закрытого ключа. То, что я ищу, не является конфиденциальностью, достигнутой автоматически ssl, но способностью позволить только конкретным пользователям дешифровать сообщения. Я знаю, что могу легко сделать это с gpg или возможно SMIME, и возможно который является лучшим способом, но я предпочел бы веб-альтернативу.

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

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

Таким образом на php стороне я использовал бы openssl вызовы шифрования как так...

<?php

$browsers_public_key = get_it_from_the_browser_via_apache_maybe(); 

openssl_public_encrypt($data,$encrypted_ends_up_here,$browsers_public_key);

echo "<html><head>
<script type='javascript'>
      function decrypt_textarea(){  
            ??
     }
</script>
</head>
<body><textarea id='decrypt_me'> $encrypted_ends_up_here </textarea> 
<div id='where_the_plaintext_goes'>  </div>
</body> </html>";

?>

Обратите внимание, что я нашел через stackedoverflow многие прекрасные библиотеки шифрования JavaScript..., но я на самом деле хочу использовать ключи, импортированные в Firefox согласно MyOpenId.com или CaCert.org

Кто-либо знает, возможно ли это?

Спасибо, - FT

5
задан ftrotter 21 January 2010 в 12:58
поделиться

3 ответа

Вы не обрабатываете SSL в своем PHP. SSL автоматически обрабатывается веб-сервером. Если вы используете Apache, вот простое руководство:

http://www.debian-administration.org/article/setting_up_an_ssl_server_with_apache2

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

Надеюсь, это поможет!

-1
ответ дан 14 December 2019 в 19:13
поделиться

Теперь, когда я понимаю, что вы говорите, я могу дать вам фирменный ответ :)

лучшее, что я могу сказать вам, это то, что вы не можете получить достойное шифрование в том, как вы хотите сделать это Отказ Шифрование частного ключа (а именно RSA) использует очень, очень, очень большие числа для шифрования. Использование небольших чисел очень просто взломать вычислительно (только так много простых чисел), а номера становятся большими быстрого быстро. В основном, с RSA, вам нужно взять большое количество и поднять их в большие показатели. JavaScript может поддерживать довольно большие числа, но вы попадете на стену с производительностью. С 512-битным ключом шифрование нескольких килобайт может занять до нескольких секунд, а дешифрование может занять секунды до минут. Причина JS такая медленная - это просто потому, что это не скомпилированный язык. Конечно, вы можете уменьшить размер ключа, но все больше, чем пара килобайт, и у вас есть проблема.

Кроме того, RSA по своей природе небезопасно на веб-странице, поскольку закрытый ключ передается рядом с данными для расшифровки (если только оно не было передано ранее), что позволяет всем, кто получает страницу для расшифровки данных.

Я собираюсь предположить, что вы хотите сделать это, потому что вы хотите запустить какой-нибудь код от своего пользователя или клиента, поэтому я собираюсь порекомендовать, чтобы вы проверили шифрование XOR. Предоставлено, это нигде не так же безопасно, как RSA, но он использует принципы, которые могут быть очень безопасными, если использоваться должным образом. Например, если вы используете произвольный ключ, который используется только один раз и имеет ту же длину, что и ваши данные / код (одноразовый PAD), ваше шифрование является «бесприцебленным». Еще лучше, шифрование Хор быстро. Вот некоторые ресурсы:

http://guymal.com/mycode/xor_js_encryption/

http://javascript.internet.com/passwords/xor-encryplation4.html

Надеюсь, у вас повезло пытаюсь сделать!

2
ответ дан 14 December 2019 в 19:13
поделиться

Я ищу точно то же самое, что и вы, и тоже хотел использовать openssl-функции php. Я был рад видеть, что на стороне php все отлично работает с закрытым/открытым ключом (шифрование/дешифрование) и теперь хотел найти способ использовать закрытый ключ на стороне клиента, как это делаете вы.

!!!

Если вы найдете что-нибудь, пожалуйста, дайте мне знать по электронной почте:

pki (at) life.de

!!!

И по поводу производительности: Вы будете шифровать большие части симметричным шифрованием и только ключ расшифровки с открытым ключом клиента, чтобы расшифровать его. Таким образом, вам не нужно шифровать много килобайт.

Но это кажется тупиком с firefox, но с IE и ActiveX это кажется возможным с CAPICOM (я не так много читал об этом сейчас). hxxp://geekswithblogs.net/shahed/archive/2007/05/03/112232.aspx

Но для JavaScript/PHP посмотрите (и прочитайте все комментарии на FAQ и других страницах, тоже! В будущем, возможно, двунаправленная связь была упомянута): hxxp://www.jcryption.org/

hxxp://www.zend.com//code/codex.php?ozid=1323&single=1

Чистое Javascript шифрование с открытым/закрытым ключом hxxp://shop-js.sourceforge.net/crypto2.htm

Полезный FireFox-аддон для PKI: hxxps://addons.mozilla.org/en-US/firefox/addon/4471 hxxp://www.mozilla.org/projects/security/pki/nss/tools/index.html

PHP с OpenSSL на стороне сервера / .NET на стороне клиента hxxp://www.csharpbydesign.com/2008/04/asymmetric-key-encryption-with.html

Javascript OpenPGP

hxxp://www.hanewin.net/encrypt/

PS: дурацкий механизм не позволяет мне размещать ссылки ...

1
ответ дан 14 December 2019 в 19:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: