문제

모듈러스가 선행 0으로 패딩 된 이유는 무엇입니까?나는 pkcs # 1과 pkcs # 8을 읽었지만 그것에 대해 아무것도 찾지 못했습니다. C에서 선도적 인 0은 제거해야합니다. 왜 누구나 그 이유를 알고 있습니까?

http:///therhack.co.uk/asymmetric/docs/rsa_key_breakdown.html ,모듈러스와 지수가 선행 0을 가지고 있음을 알 수 있습니다.그 질문은 그들이 가지고있는 이유입니다. 아직 어느 곳에서나 설명을 찾지 못했습니다.

도움이 되었습니까?

해결책

개인 키 값은 2의 보수 형식으로 서명 된 값을 asn.1 정수로 인코딩합니다. (서명되지 않은) RSA 키 값의 MSB가 설정된 경우 선행 제로 바이트가 필요합니다. Leading Zero Byte없이 MSB 세트를 갖는 것은 음수 값을 의미합니다.

ASN.1 사양은 무료이며 "> wikipedia 에서 링크됩니다. 관련 섹션은 여기서 X.690, "8.3 정수 값 인코딩"에 있습니다.

링크 된 페이지가 사라집니다.

OpenSSL이있는 경우 다음과 같은 테스트 키를 생성 할 수 있습니다.

openssl genrsa -out test.pem 512
openssl rsa -in test.pem -out test.der -outform der
.

여기에 test.der에서 샘플 데이터가 있습니다.

30 82 01 3b
ASN.1 시퀀스, 길이 0x13B, 내용은 다음과 같습니다

02 01 00
버전 : ASN.1 정수, 저장된 길이 1, 값 0

02 41 00 c0 8e ... (65 데이터 바이트)
모듈러스 : ASN.1 정수, 저장된 길이 65, 값 0xC08E ... (모듈러스가> 2 ^ 511이기 때문에 필요한 제로 바이트가 필요함)

02 03 01 00 01
공개 지수 : 0x10001 (지수는 <2 ^ 23) 때문에 0x10001 (kner zero byte 필요 없음)

02 41 00 b5 87 ... (65 데이터 바이트)
개인 지수 : 0xB587 ...

02 21 00 e7 18 ... (33 데이터 바이트)
Prime1 : 0xe718 ...

02 21 00 d5 43 ... (33 데이터 바이트)
Prime2 : 0xD543 ...

02 20 75 67 a1 ... (32 데이터 바이트)
Exponent1 : 0x7567 ... (지수는 <2 ^ 255) 때문에 <2 ^ 255이기 때문에 Leading Zero 바이트가 필요하지 않습니다.

02 20 0a f6 3f ... (32 데이터 바이트)
Exponent2 : 0x0af6 ...

02 21 00 c7 13 ... (33 데이터 바이트)
계수 : 0xC713 ...

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