2. Signature Algorithm
디지털 서명은 메시지를 기초로 디지털 서명 값을 계산하는 행위인 서명 작성과 메시지 서명이 누구의 것인지를 조사하는 행위인 서명 검증이 있다.
이 서명에는 서명용 키와 검증용 키가 나누어져 있어서 검증용 키로는 서명을 작성할 수 없다.
서명용 키: 서명을 하는 사람만이 가지고 있음(개인 키)
검증용 키: 서명을 검증하는 사람이라면 누구나 가질 수 있음(공개 키)
- 공개 키 암호와 디지털 서명
: 메시지를 개인 키로 암호화하는 것이 서명 작성, 그 암호문을 공개 키로 복호화하는 것이 서명 검증
[그림 1 - 공개 키에 의한 암호화(공개 키 암호화)]
[그림 2 - 개인 키에 의한 암호화(디지털 서명)]
디지털 서명 방법
- 메시지에 직접 서명하는 방법
- 메시지의 해시 값에 서명하는 방법
1) 암호문의 서명 사용
: 메시지를 개인 키로 암호화하는 것은 행하고 있는 처리의 내용을 설명하는 것으로 서명은 기밀성을 실현하기 위해 암호화하는 것은 아님
2) 기밀성 유지
: 디지털 서명은 기밀성을 지키기 위한 것이 아니므로 기밀성이 필요하다면 메시지를 암호화해서 보내야 함
3) 복사된 서명
: 디지털 서명은 컴퓨터상의 데이터에 지나지 않아서 통상의 파일처럼 복사를 할 수 있다. 그러나 서명은 복사의 진위보다 서명자와 특정 메시지가 결부되어 있다는 사실이 중요
4) 서명 변경
: 서명 후 메시지와 서명의 내용을 수정할 수는 있지만 서명의 검증은 실패한다. 이를 통해 검증자가 메시지가 수정되었다는 것을 검출한다. 디지털 서명이 실현하고자 하는 것은 메시지를 변경하지 못하도록 막는 방지가 아니라 문서에 변경이 있었는지 아닌지를 검출하는 것
5) 서명 부분의 재이용
: 서명 부분을 자르는 것은 가능하지만 서명 검증에 실패한다. 서명을 잘라내는 것은 메시지와 서명 사이의 수학적인 이론에 기초한 대응 관계가 있으므로 메시지가 다르면 서명도 다르기 때문에 서명만 잘라 재이용하는 것은 불가능
6) 서명의 파기
: 디지털 서명은 완전히 파기할 수는 없고 새로 문서를 만들어 상대가 그 문서에 디지털 서명을 하여 원래 문서를 무효화 시키는 것
7) 부인 방지
: '키를 가지고 있는 사람이 누구인지'와 관계가 있다. 디지털 서명의 경우, 서명을 작성할 수 있는 사람은 오직 서명용 키를 가지고 있는 사람 뿐이므로 부인할 수 없다.
SHA2 알고리즘을 사용하는 디지털 서명은 DSA, RSA 그리고 ECDSA가 있다.
2.1 DSA(Digital Signature Algorithm)
디지털 서명 알고리즘의 일종으로 이산 대수 문제의 어려움을 안정성의 바탕으로 삼았고, DSA는 SHA-224, SHA-256과 함께 사용할 수 있다.
DSA는 SHA-384, SHA-512와 함께 지정되지 않는다. DSA의 경우 p(L로 지정)의 최대 비트 길이가 3072이기 때문에 SHA-384 및 SHA-512는 지원되지 않는다. 일관된 암호화 강도를 위해 SHA-384는 L이 7680인 DSA와 함께 사용되며 SHA-512는 L이 15360인 DSA와 함께 사용된다.
- DSA KGen: 사용자 집단은 공통적이며, 공개되는 3개의 파라미터
- 160비트 길이의 소수 q
- 512 ~ 1024 비트 사이의 소수 p -> (p - 1)이 q로 나누어짐
- 형태의 g(1 < h < (p - 1))
- 각 사용자는 개인 키를 선택하고 공개 키를 생성
- 랜덤 개인 키 x 선택( )
- 개인 키 x로부터 공개 키 y 계산 ->
- DSA에 의한 서명: 메시지 별로 고유한 정수 k를 랜덤하게 생성 (0 < k < q)
- : 메시지의 함수가 아님
-
- Signature = (r, s)
- DSA 서명 검증: 수신한 r과 s로부터 계산한 v를 r과 비교하여 검증
y: 사용자 공개 키
DSA 취약성: Index Calculus Attack 등을 이용해서 Discrete Logarithm Problem(DLP)를 풀어 Private key x를 알 수 있다. ()
따라서, 더 높은 보안 수준을 위해 p를 1024 ~ 2048 또는 3072비트로 하는 것을 권장한다.
- SHA-224를 사용한 DSA 전자 서명 알고리즘에 대한 OID(Object Identifier)
id-dsa-with-sha224 OBJECT IDENTIFIER ::= {
joint-iso-ccitt(2) country(16) us(840) organization(1) gov(101)
csor(3) algorithms(4) id-dsa-with-sha2(3) 1}
- SHA-256를 사용한 DSA 전자 서명 알고리즘에 대한 OID(Object Identifier)
id-dsa-with-sha256 OBJECT IDENTIFIER ::= {
joint-iso-ccitt(2) country(16) us(840) organization(1) gov(101)
csor(3) algorithms(4) id-dsa-with-sha2(3) 2}
알고리즘 ID 중 하나가 사용될 떄 알고리즘 ID 파라미터 필드가 없어야 한다.
- SMIMECapabilities 속성 값에 대한 DER 인코딩
id-dsa-with-sha224: 30 0b 06 09 60 86 48 01 65 03 04 03 01
id-dsa-with-sha256: 30 0b 06 09 60 86 48 01 65 03 04 03 02
2.2 RSA(Rivest Shamir Adleman algorithms)
RSA는 소인수 분해 문제의 어려움에 기반한 알고리즘으로, 서명 대상이 되는 메시지와 키, 작성된 서명도 모두 수로 표현된다. 문장에 서명하고 싶을 경우 부호화를 행해서 문장을 수로 변환해야 한다.
RSA에 대한 서명 작성: 서명 = (D와 N은 서명자의 개인 키)
RSA에 의한 서명 검증: 서명으로 얻어진 메시지 =(E와 N은 서명자의 공개 키)
키 쌍 |
공개 키 |
수 E와 N |
개인 키 |
수 D와 N |
[표 1]
RSA (RSASSA-PKCS1-v1_5)는 SHA-2 전부 함께 사용될 수 있다.
SHA-224를 사용한 RSA 전자 서명 알고리즘에 대한 OID(Object Identifier)
SHA-256를 사용한 RSA 전자 서명 알고리즘에 대한 OID(Object Identifier)
SHA-384를 사용한 RSA 전자 서명 알고리즘에 대한 OID(Object Identifier)
SHA-512를 사용한 RSA 전자 서명 알고리즘에 대한 OID(Object Identifier)
- SMIMECapability 값에 대한 DER 인코딩
sha224WithRSAEncryption: 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0e 05 00
sha256WithRSAEncryption: 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00
sha384WithRSAEncryption: 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0c 05 00
sha512WithRSAEncryption: 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0d 05 00
2.3 ECDSA
ECDSA는 타원곡선 전자 서명 알고리즘으로 DSA의 변형이다. 무선 공인인증서비스 제공을 위한 공인인증시스템 및 가입자 설비는 모두 ECDSA 전자 서명 키 생성 및 전자서명 생성, 검증, 기능을 제공해야 한다. ECDSA는 SHA-* ( * = 1, 224, 256, 384, 512)와 함께 사용할 수 있다.
- SHA-224 서명 값에 대한 ECDSA 알고리즘 ID
ecdsa-with-SHA224 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 1 }
- SHA-256 서명 값에 대한 ECDSA 알고리즘 ID
ecdsa-with-SHA256 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 2 }
- SHA-384 서명 값에 대한 ECDSA 알고리즘 ID
ecdsa-with-SHA384 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 3 }
- SHA-512 서명 값에 대한 ECDSA 알고리즘 ID
ecdsa-with-SHA512 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 4 }
'Crypt' 카테고리의 다른 글
SHA-2_(1) (0) | 2017.11.03 |
---|---|
MD5 (0) | 2017.09.26 |
Hash Function (0) | 2017.09.26 |
UU Encoding (0) | 2017.09.15 |
Caesar cipher (0) | 2017.09.13 |