문제

공공-민간 키 쌍은 다양한 자료를 읽음으로써 내가 이해하는 것이 거의없고, 암살 암호화의 기초이며, 2 개의 소수 (대략 개인 키)를 선택하고 (대략 공개 키)를 곱하는 것에 관한 것입니다. 개인 키를 알고 있다면 공개 키를 생성 할 수있는 것으로 보입니다. 맞습니까 아니면 내가 뭔가 착각하고 있습니까?

편집하다

나를 더 혼란스럽게 만든 것은 RSA 키를 XML로 직렬화 할 수 없다는 것입니다. 개인 키 (.NET 클래스 rsacryptoserviceprovider 사용). 이 제한이 의도적인지 아닌지 확실하지 않습니다!

도움이 되었습니까?

해결책

이는 암호화 시스템에 따라 다릅니다.

~ 안에 RSA, 우리는 (위키 백과 인용) :

공개 키는 모듈러스 N과 대중 (또는 암호화) 지수 e로 구성됩니다. 개인 키는 모듈러스 N과 비밀로 유지 해야하는 개인 (또는 암호 해독) 지수 D로 구성됩니다.

이제 N과 D (개인 키)가있는 경우 공개 키에 대해서만 누락됩니다. 그러나 E는 종종 상당히 작습니다 (3 자리 미만) 또는 고정 (공통 값은 65537). 이 경우 공개 키를 얻는 것은 사소한 일입니다.

을 위한 타원 곡선 Diffie-Hellman, 개인 키는 D와 공개 키 DG (G도 공개적으로)이므로 사소한 것입니다.

다른 팁

대부분의 비대칭 암호화 시스템 구현에서, 유일한 사실은 공개 키에서 개인 키를 찾을 수 없다는 것입니다. 다른 방법으로, 개인 키에서 공개 키를 찾는 것은 대부분의 경우 사소한 일입니다.

예를 들어 RSA에서는 개인 키에서 공개 키를 만들 수 있습니다.

openssl rsa -in private.pem -pubout -out public.pem

오해의 소지가있는 것은 용어입니다. "개인 키"는 이론에 대해 말하는지 여부에 관계없이 두 가지 다른 개념을 말합니다.

  • 그만큼 이론적 인 개인 키는 부부입니다 (d, n) 완벽한 대칭 (수학적) 관계를 공유합니다 (E, N). 이것들을 비교하는 경우, 하나는 다른 것과 계산할 수 없습니다.
  • 그만큼 현실적인 개인 키 (예 : OpenSSL 구현에서와 같이)는 포함 된 파일을 나타냅니다. (d, n) 또한 속도 목적을 디코딩하기위한 몇 가지 중요한 중간 값도 있습니다. 그 외에도 이론적으로 공개 키의 "알 수없는"부분 이자형 종종 규칙에 따라 공통 값에 고정됩니다 (이것은 0x10001 OpenSSL에서 기본적으로 변경할 수는 있지만 만으로만 고집하는 것이 좋습니다. 매우 구체적인 값). 그래서 공개 키를 추론합니다 (E, N) 개인 키에서 여러 가지 이유로 사소한 것입니다.

알고리즘과 "개인 키"가 의미하는 바에 따라 다릅니다.

RSA 개인 키는 종종 "중국의 나머지 정리"형태로 저장됩니다. 예를 들어, RSAPrivateKey PKCS #1에 정의되고 다른 많은 암호화 표준에 의해 재사용 된 구조 가이 형식을 취합니다. 이 양식에는 종종 표시되는 두 비밀 번호가 포함됩니다 p 그리고 q, Totient가 계산되는 것. Totient와 개인 지수를 사용하면 대중 지수가 빠르게 계산됩니다.

어쨌든 대부분의 RSA 키 쌍은 65537을 공개 지수로 사용하며 모듈러스는 항상 개인 키의 일부로 운반됩니다.

공개 키 암호화 시스템에서 공개 키는 수학적으로 개인 키와 관련이 있습니다. 매우 간단합니다.

공개 키는 세대의 개인 키에서 파생되며, 앞으로 어느 시점에서나 개인 키를 사용하면 공개 키를 쉽게 재생할 수 있습니다.

다른 방향으로가는 것은 불가능합니다. 공개 키가 주어지면 개인 키를 도출하기는 쉽지 않습니다. 그렇기 때문에 우리는 다른 사람들과 안전하게 공개 열쇠를 공유 할 수 있습니다. 충분한 시간/CPU 사이클이 있다면 강제로 강제 할 수 있지만 키에 대한 수학적 공격을 기다리는 것이 더 쉽습니다.

OpenSsh의 특정 사례 SSH-Keygen, 그래 넌 할수있어:

ssh -keygen -y

이 옵션은 개인 OpenSsh 형식 파일을 읽고 공개 키를 stdout에 인쇄합니다.


일반적으로 알고리즘과 개인 키 라벨에 따라 다릅니다. 그러나 현명한 구현에는 비밀 파일의 전체 정보 (공개 및 개인 키)가 포함됩니다.

개인 키가 무엇인지에 대한 오해가 있습니다. 개인 키는 단지 (d, n) 쌍이며, 단지 공개 지수가 65537이라고 가정 할 수 없다면 공개 키를 생성하는 것은 불가능합니다. 이는 거의 모든 RSA 키의 경우입니다.

어떤 이유로 든 공개 지수가 더 많은 숫자라면 개인 키에서 공개 키를 만들 수 없습니다.

즉, PEM 파일에 "개인 키"로 저장된 값은 개인 키 일뿐 만 아니라 주요 요인 (무엇보다도)를 포함하므로 공개 키를 쉽게 생성 할 수 있습니다.

예 개인 키에 액세스하면 공개 키를 생성 할 수 있습니다.

공개 키는 모듈러스 N (및 공개 지수 E, 일반적으로 65537)이며 개인 키는 두 프라임 P, Q (및 개인 지수 D, 때로는 CRT 부품 D_P, 속도를위한 D_Q)에 의해 제공됩니다. 본질적으로 N = PQ 및 E가 있습니다.D = 1 모드 ((P-1)(Q-1)), 개인 키가 주어진 CRT를 사용하여 D_P 및 D_Q를 계산할 수 있으며, 공개 키 모듈러스 계산은 "보링"곱셈이며 표준 E가 충분하지 않은 경우 확장 된 유클리드 알고리즘을 사용하여 공개 지수가 사양에 있거나 계산됩니다. 공개 키가 주어지면 개인 키의 계산에는 D (RSA 문제) 또는 P, Q (팩터링, 최상의 Algo에 대한 숫자 필드 체 참조)가 필요합니다. 이러한 문제는 합리적인 조건에서 동등한 것으로 나타났습니다.

이론적으로 가능하지만 큰 키는 계산적으로 불가능합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top