나는 이것을 정말로 이해하지 못한다.
http://www.madboa.com/geek/openssl/#key-rsa 에 따르면 개인 키에서 공개 키를 생성 할 수 있습니다.
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
나의 초기 생각은 그것들이 함께 쌍으로 생성된다는 것이었다. RSA 개인 키에 합계가 포함되어 있습니까? 또는 공개 키?
답변
openssl genrsa -out mykey.pem 1024
실제로 공개-개인 키 쌍을 생성합니다. 쌍은 생성 된 mykey.pem
파일에 저장 됩니다.
openssl rsa -in mykey.pem -pubout > mykey.pub
공개 키를 추출하여 인쇄합니다. 다음 은이를 더 잘 설명하는 페이지에 대한 링크입니다.
편집 : 여기에 예제 섹션을 확인 하십시오 . 개인 키의 공개 부분 만 출력하려면 다음을 수행하십시오.
openssl rsa -in key.pem -pubout -out pubkey.pem
SSH 목적으로 사용 가능한 공개 키를 얻으려면 ssh-keygen을 사용하십시오 .
ssh-keygen -y -f key.pem > key.pub
답변
SSH 공개 키를 찾는 사람들 …
OpenSSH와 함께 사용할 공개 키를 추출하려는 경우 공개 키를 조금 다르게 가져와야합니다.
$ ssh-keygen -y -f mykey.pem > mykey.pub
이 공개 키 형식은 OpenSSH와 호환됩니다. 공개 키를 추가하면 remote:~/.ssh/authorized_keys
잘 갈 수 있습니다.
의 문서 SSH-KEYGEN(1)
ssh-keygen -y [-f input_keyfile]
-y 이 옵션은 개인 OpenSSH 형식 파일을 읽고 OpenSSH 공개 키를 stdout에 인쇄합니다.
답변
openssl을 포함하여 RSA 개인 키를 생성하는 대부분의 소프트웨어에서 개인 키는 PKCS # 1 RSAPrivatekey 개체 또는 그 변형으로 나타납니다.
A.1.2 RSA 개인 키 구문
RSA 개인 키는 ASN.1 유형
RSAPrivateKey 로 표시되어야합니다 .RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- p prime2 INTEGER, -- q exponent1 INTEGER, -- d mod (p-1) exponent2 INTEGER, -- d mod (q-1) coefficient INTEGER, -- (inverse of q) mod p otherPrimeInfos OtherPrimeInfos OPTIONAL }
보시다시피이 형식에는 모듈러스 및 공개 지수를 포함한 여러 필드가 있으므로 RSA 공개 키 에있는 정보의 엄격한 수퍼 세트입니다 .
답변
아래의 답변은 약간 길지만 이전 답변에서 누락 된 세부 정보를 제공하기를 바랍니다. 몇 가지 관련 진술로 시작하여 마지막 질문에 대답하겠습니다.
RSA 알고리즘을 사용하여 무언가를 암호화하려면 계수와 암호화 (공용) 지수 쌍 (n, e)이 필요합니다. 그게 당신의 공개 열쇠입니다. RSA 알고리즘을 사용하여 무언가를 해독하려면 계수와 해독 (비공개) 지수 쌍 (n, d)이 필요합니다. 그게 당신의 개인 열쇠입니다.
RSA 공개 키를 사용하여 무언가를 암호화하려면 일반 텍스트를 숫자로 취급하고 e 모듈러스 n의 제곱으로 올립니다.
ciphertext = ( plaintext^e ) mod n
RSA 개인 키를 사용하여 무언가를 해독하려면 암호문을 숫자로 취급하고 d 모듈러스 n의 제곱으로 올립니다.
plaintext = ( ciphertext^d ) mod n
openssl을 사용하여 개인 (d, n) 키를 생성하려면 다음 명령을 사용할 수 있습니다.
openssl genrsa -out private.pem 1024
openssl을 사용하여 개인 키에서 공개 (e, n) 키를 생성하려면 다음 명령을 사용할 수 있습니다.
openssl rsa -in private.pem -out public.pem -pubout
위의 openssl 명령으로 생성 된 private.pem 개인 RSA 키의 내용을 분석하려면 다음을 실행하십시오 (여기서 레이블로 잘린 출력).
openssl rsa -in private.pem -text -noout | less
modulus - n
privateExponent - d
publicExponent - e
prime1 - p
prime2 - q
exponent1 - d mod (p-1)
exponent2 - d mod (q-1)
coefficient - (q^-1) mod p
개인 키는 (n, d) 쌍으로 만 구성되어서는 안됩니까? 6 개의 추가 구성 요소가있는 이유는 무엇입니까? private.pem 개인 RSA 키에서 공개 RSA 키를 생성 / 추출 / 파생 할 수 있도록 e (공개 지수)를 포함합니다. 나머지 5 개의 구성 요소는 해독 프로세스 속도를 높이기 위해 존재합니다. 5 개의 값을 사전 계산하고 저장함으로써 RSA 암호 해독 속도를 4 배로 높일 수 있다는 것이 밝혀졌습니다. 암호 해독은 5 개의 구성 요소없이 작동하지만 편리하다면 더 빠르게 수행 할 수 있습니다. 가속 알고리즘은 Chinese Remainder Theorem을 기반으로합니다 .
예. private.pem RSA 개인 키에는 실제로 이러한 8 개의 값이 모두 포함됩니다. 이전 명령을 실행할 때 그 중 어느 것도 즉시 생성되지 않습니다. 다음 명령을 실행하고 출력을 비교하십시오.
# Convert the key from PEM to DER (binary) format
openssl rsa -in private.pem -outform der -out private.der
# Print private.der private key contents as binary stream
xxd -p private.der
# Now compare the output of the above command with output
# of the earlier openssl command that outputs private key
# components. If you stare at both outputs long enough
# you should be able to confirm that all components are
# indeed lurking somewhere in the binary stream
openssl rsa -in private.pem -text -noout | less
이 RSA 개인 키 구조는 PKCS # 1 v1.5 에서 대체 ( 두 번째 ) 표현 으로 권장됩니다 . PKCS # 1 v2.0 표준은 대체 표현에서 e 및 d 지수를 모두 제외합니다. PKCS # 1 v2.1 및 v2.2 는 선택적으로 더 많은 CRT 관련 구성 요소를 포함하여 대체 표현에 대한 추가 변경을 제안합니다.
public.pem 공개 RSA 키의 내용을 보려면 다음을 실행하십시오 (여기서 레이블로 잘린 출력).
openssl rsa -in public.pem -text -pubin -noout
Modulus - n
Exponent (public) - e
여기서 놀랄 일은 없습니다. 약속대로 그것은 단지 (n, e) 쌍입니다.
이제 마지막 질문에 답하십시오. 위에 표시된 것처럼 openssl을 사용하여 생성 된 개인 RSA 키에는 공개 키와 개인 키의 구성 요소가 포함되어 있습니다. 개인 키에서 공개 키를 생성 / 추출 / 추출 할 때 openssl은 해당 구성 요소 중 두 개 (e, n)를 별도의 파일로 복사하여 공개 키가됩니다.
답변
일부 사람들은 공개 키가 PEM 파일에 저장되지 않습니다. 개인 키 파일에는 다음과 같은 DER 구조가 있습니다.
openssl rsa-텍스트 -mykey.pem
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
따라서 공개 키 (모듈러스 및 공개 지수)를 계산하기에 충분한 데이터 openssl rsa -in mykey.pem -pubout
가 있습니다.
답변
이 코드에서는 먼저 개인용 RSA 키를 생성하지만 공개 키 쌍을 가지고 있으므로 실제 공개 키를 얻으려면 간단히
openssl rsa -in mykey.pem -pubout > mykey.pub
더 많은 정보를 얻으려면 이것을 확인하십시오.
답변
먼저 RSA 키 생성에 대한 간단한 요약입니다.
- 적절한 크기 (p 및 q)의 두 개의 임의의 가능성있는 소수를 무작위로 선택하십시오.
- 두 소수를 곱하여 계수 (n)를 생성합니다.
- 공개 지수를 선택하십시오 (e).
- 소수 및 공공 지수를 사용하여 일부 지수를 계산하여 개인 지수 (d)를 생성하십시오.
공개 키는 모듈러스와 공개 지수로 구성됩니다.
최소 개인 키는 모듈러스와 개인 지수로 구성됩니다. 알려진 계수와 개인 지수에서 해당하는 공개 지수로 갈 수있는 계산 가능한 확실한 방법은 없습니다.
하나:
- 실제 개인 키 형식은 거의 항상 n 이상을 저장합니다.
- e는 일반적으로 무작위로 선택되지 않으며 소수의 잘 알려진 값 중 하나가 사용됩니다. e가 잘 알려진 값 중 하나이고 d를 알고 있다면 시행 착오를 통해 e를 쉽게 파악할 수 있습니다.
따라서 대부분의 실제 RSA 구현에서는 개인 키에서 공개 키를 얻을 수 있습니다. 이것이 불가능한 RSA 기반의 암호화 시스템을 구축하는 것은 가능할 것이지만, 완료된 것은 아닙니다.