2013-04-16 2 views
0

제목을 매우 명확하게 읽지 않아서 몇 가지 단어로 질문을 올릴 수 없으므로 먼저 질문을 읽으십시오.공개/비공개 키 쌍 만들기 및 서명 프로그래밍 방식으로

내 시나리오 : P2P 응용 프로그램을 만들고 있습니다. 피어는 설치 중에 공용 및 개인 키 쌍을 생성하고 공개 키를 중앙 서버에 업로드합니다. 피어 A가 피어 B와 통신하기를 원할 때, 피어 A는 B의 공개 키를 다운로드하고 정상적인 암호화 및 데이터 전송이 발생한다.

이 공용/개인 키 쌍을 프로그래밍 방식으로 생성하려면 약간의 머리말이 필요합니다. 다시 말하지만, 중앙 서버의 개인 키로 서명 된 피어의 공개 키가 해당 인증서의 진위 여부를 알아야합니다.

개인 CA 종류를 만들어야합니까, 아니면 다른 방법으로도 가능합니까? 누군가가 프로그래밍 관점에서 작성, 서명 등을 이해하도록 도와 줄 수 있다면 좋을 것입니다. 나는 구글 검색에서 개념을 많이 얻고 있지만 코딩에는 그다지 중요하지 않다. 나는 암호를 처음 사용하기 때문에 다른 것을 구현하는 것이 도움이 될 것입니다.

참고 : 타사 CA를 사용할 수 없습니다. 인증을 위해 인증서를 사용하는 것이 아니라 암호화에 사용합니다.

감사합니다.

답변

0

고전 PKI 시나리오 ... 당신이 원하는 CA ... 동료가 미리 공개 CA의 인증서를 알아야 할 모든

... 서버와 피어 레지스터 번

, 그것을 서버가 수신 된 키가 훼손되지 않았 음을 확신 할 수 있도록 자체 키를 암호화해야합니다 ...> 생성 키 쌍
- ...

를 A는 새로운 키 쌍에 등록하고자하는

피어 - :

데이터 구조를 위해 당신은 아마 X509

보기의 프로그래머 지점에서

를 사용한다 > 인증서의 신원 정보를 입력하고 공개 키 (일반적으로 "인증서 요청"이라고 함)을 첨부하십시오.

-> enc (임의의 IV가있는 AES-CBC-256은 좋은 선택처럼 보임)
-> 대칭 키를 암호화하고 암호화 된 요청과 일반 텍스트 IV를 함께 서버에 보냅니다 (선택적으로 서버를 포함하십시오) 제공된 논스 또는 암호화 된 부분 addidional 세션 데이터)를 서버 측

:

해독 데이터, 즉 OK 인 경우, 요청 (ID 부 + 공공을 요청 특히 식별 정보를 확인 키)로 서명하고 CA 키로 서명하십시오.

피어 A로보고하고 서명 된 인증서를 핸드 오버합니다 인스 그것은 일반 텍스트 또는있을 수있는 비밀을 포함하지 않는 피어 A의 열쇠)는 동료들 사이의 접촉을 만들 필요하면

, 당신은 일부 연락처 정보가 필요 암호화 : 피어 경우

을 X는 피어 A에게 연락하기를 원한다. 당신이 나누어 주어야하는 것은 A가 어떻게 연락 될 수있는 주소인가? X는 A에게 연락하여 ID ("여보세요? 이게 A인가? 인증서를 교환 한 후 서명을 확인합니다 ... CA 서명이 정상이면 양 당사자가 임의 번호 ("nonces", 한 번 사용 된 번호)를 생성합니다. 수신 및 검증 된 인증서로부터 공개 키로 이들을 암호화하여 다른 피어로 넘겨 준다 ... 암호화 된 값을 수신하면 복호화되고 다른 당사자의 키로 재 암호화되고, 그 복호화를 수신하면 되돌려 보낸다 자신의 개인 키로 값을 보내고 인증 된 연결이 설정되어 있는지 확인합니다. 이제 인증 된 연결이 설정되고 이제는 대칭 키를 핸드 오버하고 암호화 된 데이터 전송을 시작합니다.

인증 없이는 살 수 있다고 생각되면 다른 피어, 자신의 인증서에 대한 CA sig를 확인한 후 직접 암호화 된 데이터를 전송할 수 있습니다 ...하지만이 경우에는 attac ker는 그에게 맞지 않는 데이터를받을 수 있습니다 (해독 할 수는 없지만 다른 피어 인 척할 수 있습니다 ...)

+0

고마워요. 이 구현과 비슷한 것을 생각하고 있었지만 다른 구현도 있었으므로 어떤 것을 구현해야하는지 알 수 없었습니다. 내가 생각한 또 다른 방법은 등록하는 동안 서버가 키 쌍과 인증서를 만들고 인증서에 서명하여 다시 피어에게 전송하는 것입니다. 그러나 나는이 구현과 함께 갈 것이라고 생각한다. 실제 CA와 같이 CA를 만들지는 않지만 중앙 서버에 자체 서명 된 인증서와 키 쌍이 있습니다. 그리고 그것을 사용하여 모든 피어 인증서에 서명하십시오. –

+0

확립 된 CA 소프트웨어를 사용하지 않고 이러한 작업을 직접 수행 한 경우의 보안 관련 내용을 알려주실 수 있습니까? 서명 부분은 매우 단순한 것으로 보이며 이에 대한 CA 소프트웨어를 가지고 있지는 않습니다. –

+0

... CA 소프트웨어 란 무엇입니까? ... openssl을 살펴 본다면 "작은 CA"가 포함됩니다 ... openssl의 기본 작업에 관한 스크립트 모음 ... CA의 빌드 ... 사실 ...당신 CA는 자체 서명 된 인증서를 가질 것입니다 ... 좋습니다 ... 다른 CA를보십시오 ... 브라우저의 모든 루트 CA에는 자체 서명 된 인증서가 있습니다 ... 유일한 차이점은 브라우저 나 운영 체제와 함께 제공되는 것입니다 ... 귀하의 응용 프로그램과 함께 전달됩니다 ...이 CA는 다른 어떤 실제처럼 될 것입니다 ... – DarkSquirrel42

1

개념에 많은 타격을 입은 이유는 프로그래밍이 아니라 좋은 프로토콜을 제시하기가 어렵 기 때문에 이 아니기 때문에 실제로 프로그래밍 할 수 없습니다. 이것도 함께 할 올바른 순서입니다. 이런 종류의 프로토콜은 나중에 프로그래밍하고 문서화 할 수 없습니다.

서명이나 암호화에 인증서/개인 키를 사용하려는 경우별로 중요하지 않습니다. 요점은 공개 키를 신뢰할 필요가 있다는 것입니다. 공개 키를 신뢰할 수 없다면 올바른 엔티티에 대해 암호화가 수행되었다고 보장 할 수 없습니다. 이는 예를 들어 피어 A는 B 대신 M의 공개 키를 사용하여 암호화했습니다. 이는 도청 공격에만 관심이 없다면 거의 항상 문제가됩니다.

중앙 서버가있는 것처럼 보이므로 계층 적 트러스트 모델을 사용하는 것이 논리적 인 것처럼 보입니다. 이러한 시스템의 경우 X509 인증서와 중앙 CA를 사용하는 PKI가 가장 적합합니다. OpenSSL 기반 CA 시스템 또는 EJBCA 또는 일부 Windows 서버 기반 솔루션과 같은 다른 무료 CA 솔루션을 사용할 수 있습니다.

CA를 실행하면 아직 없습니다. 피어가 CA의 루트 인증서를 신뢰하는 방법이 필요합니다. 그런 다음 CA가 동료가 보내는 인증서 요청을 신뢰하는 방법이 필요합니다. 더 많은 정보가 없으면 가장 적합한 방법이 무엇인지 말하기는 어렵습니다.

프로그래밍에 대해 걱정할 필요가 있습니다. 최소한이 모든 것을 알아 냈을 때입니다.

+0

무료 상담이 많이 있습니다. –

+0

나를 가르쳐 줄 수 있습니까? X509 및 구현에 대한 좋은 자습서가 있습니까? –

관련 문제