2015-01-12 9 views
0

Я работаю над приложением C#, которое шифрует/расшифровывает сообщения, используя PGP, реализованный библиотекой Bouncy Castle (BC). Я знаю PKI, но секретный ключ PGP меня отбрасывает. Я посмотрел примеры/исходный код BC и PGP RFC, но ушел с большим количеством вопросов.Что такое секретный ключ PGP?

Is Secretkey == Session Key?

Is Secretkey == Симметричный ключ?

Is Secretkey == закрытый ключ (паб/приватные пары ключей)? По крайней мере, следующее кажется, что секретный ключ является закрытым ключом.

internal static PgpPrivateKey FindSecretKey(PgpSecretKeyRingBundle pgpSec, long keyID, char[] pass) 

RFC, говорит SecretKey содержит, среди прочего, информацию о ОткрытыйКлюч или может быть сам открытый ключ (по крайней мере, это мое чтение).

Кроме того, где-то я читал, что Secretkey - это в основном секретный пароль, зашифрованный паролем.

Когда/зачем мне нужен секретный ключ в протоколе PGP? Подписание или шифрование?

Thanks

ответ

2

Цитирование RFC 4880, OpenPGP, 5.5.1.3. Secret-Key Packet:

Секрет-Key пакет содержит всю информацию, которая находится в Государственно-Key пакета в , в том числе открытого ключа материала, но и включает в себя секретным ключом материал после все поля с открытым ключом.

и 11.2. Transferable Secret Keys:

[...] Формат передаваемого секретного ключа такого же, как трансферабельный открытый ключ, за исключением того, что секретного ключа и секретными подключи пакеты используются вместо от общего числа пакетов ключей и публичных подключений. Реализации должны включать самосмазывающиеся подписи на любых идентификаторов пользователей и подразделов, [...]

С другими словами, секретный ключ содержит/приватную пару ключей общественности (например., RSA), но должен также содержать идентификаторы пользователей и самоподписи. 12.1. Key Structures дает более подробную информацию о том, как экспортируются ключи. Полезным инструментом для понимания состава пакетов OpenPGP является gpg --list-packets [file] или pgpdump [file], которые выгружают структуру пакетов для их ввода.

+0

Я хочу сделать это ответом, но не знаю, как это сделать. – hexterminator

+0

Рядом с треугольниками голоса есть небольшая серая галочка, которую вы можете щелкнуть, чтобы выбрать ответ. Также есть описание в [FAQ]. –

0

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

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

+0

Я только что прошел через искупительный исходный код замка немного больше. У секретного ключа есть пара открытого и закрытого ключей. Как правило, это относится к криптографии с открытым ключом, поскольку вы можете сгенерировать открытый ключ из закрытого ключа с паролем.Что касается Bouncy Caste (BC), Secretkey передается для подписания (шифрование дайджеста с секретным ключом, извлеченным из секретного ключа) и Secretkey! = Симметричный ключ. Во время выполнения генерируется ключ Symmetric (ключ шифрования). Спасибо, что указал мне в правильном направлении. – hexterminator

+0

Вы правы. Обратите внимание, что вывод открытого ключа из закрытого ключа не является теоретическим требованием. Очень возможно (но не очень разумно) создать публичный ключ RSA с большим общественным показателем, например. Публичный показатель RSA обычно хранится с закрытым ключом, хотя и в форматах контейнеров PKCS # 1/PKCS # 8 (и т. Д.). Вероятно, я удалю этот ответ в пользу ответа Йенса, который хотя бы потратил время на поиск RFC :) –

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