내가 기억하는 한 공개 키를 사용하여 메시지를 암호화하고 개인 키를 사용하여 해독합니다. 내 질문은 RSA 개인 키에서 공개 키를 얻을 수 있는지 여부입니다. 예를 들어 다음과 같은 키가있는 경우 :
-----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQCtrKVnwse4anfX+JzM7imShXZUC+QBXQ11A5bOWwHFkXc4nTfE Or3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j3NgqX8zZJG7IwLJ/Pm2sRW5Q j32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdWtoeLfxDBL2AJ20qXzQIDAQAB AoGBAKNXi0GpmjnCOPDxLFg5bvQVfhLSFCGMKQny1DVEtsfgZmbixv5R2R41T4+d CHJMdEsUFFJ6I7CRLTcg1SDU8IhcAWCBRSNeVuomCHlQG16ti8HxwhiwIcjvDz/z NC2sL5ZJ2eJnhbtXLdf6pxxO1pA5vLp1AX06IaETO977XvupAkEA+ZgtGZybyUkf tEA3ekXc5eLoW+zgU0C1fATWcIZ8Iq5YV1BW+3oAzf8HgIbkQh4LM2qa6An3l+vW NXR4wICHkwJBALIhrcdJqKw36qiyenq+m78klp5SnurQifVt0Sy1GMWyOUqYz5jK t9sGo9Qn6GDuYe/XGXKWQW25PkEYXxxPPx8CQQCpICyvRidp5VrOURVGjUB5pZ+9 am02/In9V2nXJcnH1kuWHqJSFQGmlEEJHl5dTu5YEMyWnupezzd/UUThbDZxAkAz TNO5QxNalbf04YG4e9Bq2eSur+iog2pXzkqhb3404UDypNOUkz0jzOO9o8ieschu xCnGAFPTf7fYE2bAxmnNAkEA0/3bdsvJclquypqP9CQeQnxGwQtWz6+yn07gj3U1 V19mdeKCUZWklRarrcr67u9DdEx+JowyEY/ppzgeQtW01g== -----END RSA PRIVATE KEY-----
공개 키를 얻을 수 있나요?
댓글
- 이 키는 이제 인터넷에 유출되었으며 더 이상 예제 외부에서 사용하기에 안전하지 않습니다.
- ” 여기에 우리 집의 열쇠가 있습니다. 누가 사본을 만들고 싶습니까? ”
- OP가이 질문에 사용하기위한 예제 키를 생성 한 다음 즉시 폐기하기를 바랍니다.
- @ basic6 ” 여기 내 집의 열쇠가 있습니다. 잠금을 설정하려면 어떻게해야합니까? ”
- ‘에 대해 질문하고 있는지 명확히해야합니다. 개인 키 (이 경우 대답은 아니오) 또는 개인 키 파일 은 규칙에 따라 두 키를 모두 포함합니다.
답변
공개 키를받을 수 있나요?
openssl rsa
를 사용하는 것은 쉽습니다 :
$ openssl rsa -in the-private-key-from-your-question.pem -pubout writing RSA key -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtrKVnwse4anfX+JzM7imShXZU C+QBXQ11A5bOWwHFkXc4nTfEOr3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j 3NgqX8zZJG7IwLJ/Pm2sRW5Qj32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdW toeLfxDBL2AJ20qXzQIDAQAB -----END PUBLIC KEY---
키 파일에 포함 된 내용을 알고 싶다면 -text
옵션을 전달하여 사람이 읽을 수있는 (일종의) 디버그 덤프를 볼 수 있습니다. 이렇게하면 키 파일에는 개인 정보와 공개 정보가 모두 포함되어 있습니다. 특히 공개 키를 완전히 설명하는 modulus 및 publicExponent가 포함되어 있습니다.
$ openssl rsa -text -in the-private-key-from-your-question.pem Private-Key: (1024 bit) modulus: 00:ad:ac:a5:67:c2:c7:b8:6a:77:d7:f8:9c:cc:ee: 29:92:85:76:54:0b:e4:01:5d:0d:75:03:96:ce:5b: 01:c5:91:77:38:9d:37:c4:3a:bd:df:26:39:d1:49: 4e:40:dc:84:4e:15:4f:e9:55:53:62:5c:93:64:97: ba:90:64:ae:66:61:bf:23:dc:d8:2a:5f:cc:d9:24: 6e:c8:c0:b2:7f:3e:6d:ac:45:6e:50:8f:7d:82:fe: e2:6e:9b:ae:10:fe:21:08:b0:28:3f:98:98:c3:2e: 1d:65:ca:51:0c:12:ec:ca:81:37:56:b6:87:8b:7f: 10:c1:2f:60:09:db:4a:97:cd publicExponent: 65537 (0x10001) privateExponent: (…)
Comments
- @Pysis :이 답변은 ” 찾습니다 “. 개인 및 공개 부분 모두에 필요한 모든 정보가 개인 키 파일에 저장되는 것은 간단합니다. 대신 공개 키 파일에서 비공개 부분에 대한 모든 정보가 누락되었습니다.
- @Pysis 이것은 비대칭 암호화입니다.
- @Pysis 예, 비대칭 암호화는 ” 약간 비대칭 “.
- @SteffenUllrich 그 문장은 답변의 일부 여야합니다.
- @Mehrdad : 실제 정보 보안의 맥락에서 실질적으로 불가능한 것은 불가능한 것으로 간주됩니다. 정보 이론적 보안은 단순히 존재하지 않는 무제한 컴퓨팅 능력을 가정하기 때문에 여기에서 관련이 없습니다. 따라서 개인 부분에 관한 모든 정보가 누락 됨 은 실제로 개인 키를 유도 할 수 있도록하는 모든 정보가 누락 됨 으로 읽어야합니다.
답변
실제로는 다음과 같이 할 수 있습니다. 개인 키에서 공개 키를 가져옵니다. 원칙적으로 해당 공개 키를 쉽게 얻을 수없는 RSA 개인 키를 만드는 것이 가능합니다 . 그러나이를 위해서는 비표준 키 생성 방법과 비표준 개인 키 저장 형식을 모두 사용해야합니다.
기본 사항을 빠르게 살펴 보겠습니다. RSA 공개 키는 두 가지로 구성됩니다. 값 :
- 계수 n (비밀히 선택된 두 개의 큰 소수 p 및 q 의 곱), 및
- 공용 지수 e (많은 키에 대해 동일 할 수 있으며 일반적으로 작은 홀수 소수로 선택되며 가장 일반적으로 3 또는 2 16 +1 = 6 5537).
RSA 개인 키에는 최소한 다음 두 값이 필요합니다.
- 계수 n (공개 키에서와 동일) 및
- 개인 지수 d (공개 지수 e 및 계수의 p 및 q ).
그러나
PKCS1 질문에 표시된 RSAPrivateKey 형식은 실제로 다음을 포함한 추가 값도 저장합니다.
- 공개 지수 e ,
- 계수의 계수 p 및 q ,
- 감소 된 사적 지수 d p = d 모드 ( p − 1) 및 d q = d 모드 ( q − 1) 및
- “CRT 계수 “ q inv = q − 1 mod p .
특히 공개 지수 e 개인 키 형식은 PKCS1 호환 개인 키 파일에서 공개 키를 간단하게 추출 할 수 있음을 의미합니다.또한 공개 지수 e 가 비공개 키 파일에 포함되지 않은 경우에도 계수 p 및 q 를 알면 두 지수 중 하나를 허용합니다. 쉽게 계산할 수 있습니다. 마지막으로 모듈러스의 요소를 알지 못하더라도 일반적인 방식으로 생성 된 RSA 키의 경우 가장 일반적으로 사용되는 e 값을 테스트하고 그 중 어떤 값이 생성되는지 확인할 수 있습니다. 주어진 개인 키를 사용하여 올바르게 복호화 할 수있는 암호문.
e 를 선택한 비표준 RSA 키 생성 알고리즘을 사용하는 경우 또는 d ) 허용되는 값 범위 (즉, 1보다 크고 작은 정수 및 λ ( n ) = lcm ( p − 1, q − 1)), 해독을위한 최소한의 정보 만 저장 한 비표준 RSA 개인 키 형식 (예 : n 및 d )을 사용한 경우 그런 다음 키를 효과적으로 크래킹하지 않고 (즉, 계수를 분해하지 않고) 개인 키에서 공개 키를 계산할 수 없습니다.
사실, 그러한 비표준 사람에게 사용된다면 즉, RSA 알고리즘은 키 ( n , e ) 및 ( n , d )는 다른 하나에서 효과적으로 계산 될 수 있으며 둘 중 하나는 개인 키로 임의로 지정 될 수 있습니다. 원칙적으로 개인 키 보유자에게 해당 “공개”키를 알리지 않으면 (물론 실제로 더 이상 공개되지 않을 것임을 의미) 메시지를 해독 할 수만 있고 암호화 할 수는 없습니다. 아아, 이러한 체계의 실질적인 유용성 은 키 쌍을 생성하는 사람이 결국 그 키 쌍을 모두 알게 될 것이라는 단순한 사실에 의해 다소 제한됩니다.
댓글
- 마지막 문장이 눈살을 찌푸립니다. 어쨌든 e는 공개로 간주되므로 e (및 p 및 q)를 잊지 않는 것은 개인 키 소유자가 사용할 수있는 백도어로 간주 될 수 없습니다. (그리고 공격자가 개인 키 d를 획득하면 공개 키 e도 갖고 승리합니다.)
- @HagenvonEitzen : 마지막 단락은 e가 공개되지도 작지도 않은 (비표준) 사용 사례에 대해 이야기합니다. .
- @HagenvonEitzen : 사실 저는 링크 된 crypto.SE 게시물에서 그 문제를 언급했습니다. ” 비공개에서 파생되지 않는 ” 공개 ” 키에 의존하는 모든 스키마 ” 키는 반드시 적어도 일부 당사자의 ” 공개 ” 키 비밀을 유지해야합니다 ( 따라서 해당 기능이 사용되는 경우 공개 키 암호화의 표준 가정 중 하나를 위반합니다. 그러나 나는 그 단락이 어떻게 오해를 불러 일으켰는지 알 수 있습니다. 재 작성된 버전이 적어도 조금 더 명확 해지기를 바랍니다.
- RSA에는 암호 해독과 동일한 공식을 사용하는 흥미로운 수학적 속성이 있습니다. 대신
d
만 사용하면됩니다.e
. 덕분에e
와d
를 바꿀 수 있습니다 (즉, 암호화에는 개인 키를 사용하고 복호화에는 공개 키를 사용). 그런 다음 전자 서명 체계를 얻습니다.
답변
예. 매우 쉽습니다. RSA 사양을 살펴보면 공개 키에는 n
및 e
가 필요합니다. 개인 키에는 p
q
d
.이 값을 사용하여 계산하세요.
n=p*q e=mod_inverse(d,euler_totient(n))
PEM 형식으로 다시 포장하려면 https://github.com/ius/rsatool 를 참조하세요.
댓글
- 수학적 대답으로 틀린 것은 잘못된 것입니다. 개인 키는 n과 d 만 가질 수 있으며 그로부터 불가능합니다. 일반적으로 e를 계산하는 것입니다. ‘ 일반적으로 실제로는 e가 소수의 값 중에서 거의 항상 선택되기 때문에 가능합니다. 실용적인 답으로 틀린 것은 잘못된 것입니다. e는, 실제로는 항상 다른 매개 변수와 함께 포함됩니다 (최소 n 및 d, 일반적으로 CRT 기반 계산에 필요한 매개 변수).
- 동의하지만 실제로는 CRT 개인 키가있는 RSA가 일반적으로 저장됩니다. 여기에 해당하는 (n, e, d, p, q, dP, dQ, qInv)의 튜플로. 구성 요소를 수학적으로 설정하려고 시도했습니다.
- 예 : 실제로 개인 키는 일반적으로 e를 포함하는 튜플 로 저장됩니다. e를 계산할 필요가 없습니다.
- @Gilles 게시물에서 : ” 공개 키에는
n
및e
.” 및 sudhackar ‘의 의견 : “하지만 실제로 CRT 개인 키를 사용하는 RSA는 일반적으로 (n, e, d, p, q, dP, dQ, qlnv) “의 튜플로 저장됩니다. 이는 실제로 개인 키가 일반적으로 저장된다는 결론을 내립니다. 개인 키를 포함하는 튜플로. 개인 키를 계산할 필요가 없으므로이 전체 질문과 모든 답변이 관련이 없습니다. 귀하의 최근 댓글을 ‘ 이해하지 않습니다. sudhackar ‘의 대답은 가능한 최소한의 유용한 정보에서 가능한 공개 키 세트를 찾는 방법을 보여줍니다. - @ wizzwizz4 p, q 및 d가있는 경우 , 개인 키에 대해 가능한 가장 유용한 정보가 없습니다. 저는 ‘ p, q 및 d가 있지만 n과 e가 아닌 개인 키를 본 적이 없습니다. 키로 유용한 작업을 수행하려면 n이 필요하고 n 대신 p와 q를 저장하면 저장 용량이 확보되지 않습니다. ‘