항상 F3의 지수 값 (0x010001)을 사용하여 1024 비트 키 140 바이트 일 것이다.
공개 키의 인코딩 pb
및 pc
선택적 패딩 바이트 (제외되는 정수를 방지하기 위해) 및 XA-XC (및 Y/ZA-c)의 값이다
SEQUENCE (RSAPublicKey)
30 xa [ya [za ...]]
INTEGER (n)
02 xb [yb [zb ...]] [pb] ...
INTEGER (e)
02 xc [yc [zc ...]] [pc] ...
인 BER 길이입니다.
e가 0x010001이면 02 03 01 00 01
으로 인코딩되며 항상 5 바이트입니다.
RSA 키의 키 크기는 첫 번째 설정된 비트로 시작하는 비트 문자열의 길이에 의해 결정됩니다. 따라서 1024 비트 키 값^1,023 2^1,024 (2) 사이에있을 것이고, 그것이 하이 비트가 설정되기 때문에
0b1xxx_xxxx {1016 other "don't care" bits}
같을 것이다 숫자 패딩없이 마이너스이므로 것 1024 비트 숫자는 128 값 바이트로 인코딩되고 "부호 비트가 설정되지 않음"의 한 바이트 또는 129 바이트가 인코딩됩니다.
이제는 정수의 전체 인코딩 길이 인 129를 알 수 있습니다. 길이가 0x79 (가장 큰 "압축"BER 길이)보다 큰 16 진수 0x81이므로 길이가 긴 형식으로 작성됩니다. 다음 1 바이트 (s)로 표현됨) 0x81.
02 81 81 00 [128 more bytes representing n]
는 그래서 e
5 바이트로 부호화하고 n
는로 인코딩 (132) (128 + 1 + 2 + 1) 헥스 137
(137)은 시퀀스 길이를 0x81 0x89를 수있게 0x89를이다, . 137 바이트의 내용 + 길이의 2 바이트 + 태그의 1 바이트 => 140 바이트.
30 81 89
02 81 81 00 [128 more bytes of n]
02 03 01 00 01
이 계산에서는 아무도 자신의 키 크기 정의에 문제가 없다고 가정합니다. 느슨한 해석 (http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Br1.pdf이 잘못된 경우)은 n
의 값을 2^1016과 2^1024 사이에 넣을 것입니다 (일명 "128 바이트가 필요합니다. 어느 비트가 가장 높은 비트를 가집니까?"). 이 경우 패딩 바이트는 n
에서 사라질 수 있으며 길이는 139로 줄어 듭니다.
예, 크기는 다양 할 수 있습니다. '-RSAPublicKey_out'이 내 버전의 openssl에 유효한 옵션이 아니기 때문에 파이프의 두 번째 명령이 무엇인지 알 수 없습니다. –