아래의 답변은 약간 길지만 이전 답변에서 누락 된 세부 정보를 제공하기를 바랍니다. 몇 가지 관련 진술로 시작하여 마지막 질문에 대답하겠습니다.
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)를 별도의 파일로 복사하여 공개 키가됩니다.