2015-01-12 5 views
0

Bouncy Castle (BC) 라이브러리에서 구현 한 PGP를 사용하여 메시지를 암호화/해독하는 C# 응용 프로그램을 개발 중입니다. 나는 PKI를 안다. 그러나 PGP의 비밀 키는 나를 조금 벗어난다. BC 예제/소스 코드와 PGP RFC를 살펴 보았지만 더 많은 질문이있었습니다.PGP 비밀 키 란 무엇입니까?

비밀 키 == 세션 키입니까?

비밀 키 == 대칭 키입니까?

Secretkey == 개인 키 (pub/priv key pairs)입니까? 적어도 다음은 비밀 키가 개인 키임을 제안하는 것으로 보인다.

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

은 RFC는의 비밀은, 다른 사람의 사이에서의 공개 키에 대한 정보를 포함하거나 (적어도 그 내 독서의) 공개 키 자체가있을 수 있습니다 말한다.

또한 어딘가에서 비밀 키는 기본적으로 비밀 키 암호화 개인 키입니다.

/왜 PGP 프로토콜에서 비밀 키가 필요합니까? 서명 또는 암호화?

감사합니다.

답변

2

인용 RFC 4880, OpenPGP, 5.5.1.3. Secret-Key Packet :

비밀의-키 패킷이 공개 키 재료를 포함하는 공개 키 패킷에있는 모든 정보를 포함하고, 또한 후 비밀 키 재료를 포함 모든 공개 키 필드.

11.2. Transferable Secret Keys :

[...] 전사 성 비밀 키의 형식 대신에 사용되는 비밀 키 및 비밀 하위 패킷 제외한 양도 공개 키와 동일 공개 키와 public-subkey 패킷. 구현은 [...] 즉와

는, 비밀 키는 공개/개인 키 쌍 (예., RSA)를 포함,뿐만 아니라 포함해야합니다, 사용자 ID와 하위 키에 자기 서명을 포함해야 사용자 ID 및 자체 서명. 12.1. Key Structures은 내 보낸 키의 생성 방법에 대해 자세히 설명합니다. OpenPGP 패킷의 구성을 이해하는 데 유용한 도구는 입력의 패킷 구조를 덤프하는 gpg --list-packets [file] 또는 pgpdump [file]입니다.

+0

나는 이것을 답으로하고 싶지만 어떻게해야할지 모르겠다. – hexterminator

+0

투표 삼각형 옆에 왼쪽에 작은 회색 확인 표시가있어서 클릭하여 대답을 선택할 수 있습니다. [FAQ]에도 설명이 있습니다. –

0

이 경우 비밀 키는 개인 키입니다. 개인 키는 서명 또는 암호 해독에 사용될 수 있습니다. 암호화 및 확인은 상대방의 공개 키 을 사용하여 수행됩니다. 현재 비밀 키는 대칭 키로 생각되지만, 특히 이전 프로토콜에서는 개인 키를 의미 할 수도 있습니다.

이러한 종류의 암호화에는 혼란이 있습니다. 가장 좋은 방법은 컨텍스트를 살펴 보는 것입니다. 예를 들어 공개 키가있는 경우 키는 대칭이 될 수 없습니다.

+0

나는 탄력성있는 성 소스 코드를 조금 훑어 보았다. 비밀 키에는 공개 키와 개인 키 쌍이 있습니다. 이것은 공개 키 암호화에서 일반적으로 해당되는데 비밀 키로 공개 키를 생성 할 수 있습니다.Bouncy Caste (BC)와 관련하여 Secretkey는 서명 (비밀 키로 추출 된 개인 키로 다이제스트 암호화) 및 Secretkey! = 대칭 키로 전달됩니다. 대칭 (암호화 키) 키는 런타임에 생성됩니다. 나를 올바른 방향으로 가리켜 주셔서 감사합니다. – hexterminator

+0

맞습니다. 개인 키에서 공개 키를 파생시키는 것은 이론적 인 요구 사항이 아니라는 점에 유의하십시오. 예를 들어 큰 공개 지수를 가진 RSA 공개 키를 만드는 것이 가능합니다 (하지만별로 합리적이지는 않습니다). PKCS # 1/PKCS # 8 (등) 컨테이너 형식에서도, RSA 공개 지수는 일반적으로 비공개 키로 보관 유지됩니다. 나는 아마도이 답변을 삭제할 것이다. Jens 대답에 찬성하여, 적어도 RFC를 검색 할 시간이 걸렸다. :) –