첫 번째 단계는 M
이 (해시되지 않은) 메시지입니다 EMSA-PKCS1-v1_5하고있다 emLen
우리는 Hash
는 (문제로) SHA-1
알고있다.
H
= Hash(M)
. (일반적으로 비트 표시)는 RSA 키의 크기 (바이트)이므로, 출력은 20 바이트입니다. 현실을 가정 해 봅시다 생산 된 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
.
구조체 T
:
// DigestInfo = SEQUENCE(AlgorithmIdentifier, OCTET STRING)
30 21
// AlgorithmIdentifier = SEQUENCE(OBJECT IDENTIFIER, ANY)
30 09
// OBJECT IDENTIFIER(SHA1) => OBJECT IDENTIFIER(1.3.14.3.2.26)
06 05 2B 0E 03 02 1A
// NULL (SHA-1 has no parameters)
05 00
// OCTET STRING(H)
04 14 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
이러한 구조의 모든 고정하고 있기 때문에 값 (SHA-1 OID) 및/또는 길이 (H = 20 바이트) T는 그냥 (30 21 30 09 06 05 2B 0E 03 02 1A 05 00 04 14
CONCAT H
) (SHA-위한 1).
2048 비트 키 (256 바이트)가 있다고 가정 해 보겠습니다. tLen = 35, emLen> tLen + 11이므로, 진행하는 것이 좋습니다.
이제 PS
을 빌드하십시오. emLen - tLen - 3
FF
입니다. RSA-2048이있는 SHA-1의 경우 218 FF
시퀀스를 의미합니다. 당신이 맨 끝에, 해시 출력은 여전히 볼 수 있습니다 볼 수 있듯이
EM = 00 01 PS 00 T
이제 모든 것을 함께 붙이기, 우리는
00 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF 00 30 21 30
09 06 05 2B 0E 03 02 1A 05 00 04 14 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
(SHA-1 및 2048 비트 키) 얻을. EMSA-PKCS1-v1_5 패딩 구조가 예상 한 것 같습니다.
이어서, EM
는 서명을 생성하기 위해 RSA 개인 키 화학식 통해인가 얻는다 :
`signature` = MODPOW(`EM`, `d`, `n`)
signature
의 값이 현재 고정 된 예는 소정 수 없다 d
(비밀 키)에 의존하기 때문이다. 그러나이 마지막 단계는 a) 암호 학적으로 건전하고 b) 더 이상 서명 값 내에서 MessageDigest
값을 찾을 수없는 이유입니다.RSA에 대한
는 서명이
`candidate` = MODPOW(`signature`, `e`, `n`)
return ConstantTimeSequenceEquals(`candidate`, `EM`);
새로운 RSA 서명 알고리즘 (PSS (확률 서명 방식))로 확인 된 매우 다르게 작동됩니다 시그니처. DSA와 ECDSA는 훨씬 더 다르게 작동합니다.
다음을보십시오. http://security.stackexchange.com/questions/9260/sha-rsa-and-the-relation-between-them – JaggenSWE