디지털 서명 알고리즘
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
디지털 서명 알고리즘(DSA)은 1991년 미국에서 제안된 공개 키 서명 표준으로, 키 생성, 키 분배, 서명, 서명 검증의 네 가지 연산으로 구성된다. DSA는 미국 정부의 요청에 따라 개발되었으며, 국립표준기술연구소(NIST)에 의해 연방 표준으로 채택되었다. DSA는 SHA-2 해시 함수군을 사용하고 더 큰 키 길이를 권장하는 등 여러 차례 개정되었으며, 2023년 FIPS 186-5 표준에서는 DSA를 사용한 서명 생성을 금지하고 기존 서명의 검증만 허용한다. DSA는 이산 로그 문제의 어려움에 기반하며, 동일한 k 값 사용 등의 취약점으로 인해 개인 키가 노출될 수 있다. OpenSSH는 DSA를 2025년에 제거할 예정이다.
더 읽어볼만한 페이지
| 디지털 서명 알고리즘 | |
|---|---|
| 디지털 서명 알고리즘 정보 | |
| 유형 | 디지털 서명 |
| 약자 | DSA |
| 개발자 | 데이비드 크라비츠 |
| 특허 | US 4995082 & US 5231668 |
| 첫 공개 | 1991년 8월 |
| 발표 | 1993년 |
| 표준화 | FIPS 186 |
| 기반 | 이산 로그 문제 |
| 보안 | |
| 키 길이 | 512 ~ 1024 비트 |
| 해시 함수 | |
| 초기 | SHA-1 |
| 현재 | SHA-2 또는 SHA-3 |
2. 역사
1982년, 미국 정부는 공개 키 서명 표준에 대한 제안을 요청했다. 1991년 8월, 국립표준기술연구소(NIST)는 디지털 서명 표준(DSS)에 사용할 DSA를 제안했다. 초기에는 RSA 암호 시스템을 기반으로 디지털 서명 소프트웨어를 개발해온 소프트웨어 회사들을 중심으로 상당한 비판이 있었다.[1] 그럼에도 불구하고, NIST는 1994년에 DSA를 연방 표준(FIPS 186)으로 채택했다. 이후 여러 차례 개정되었는데, 발표된 연도와 표준 번호는 다음과 같다.
- 1998년: FIPS 186–1[3]
- 2000년: FIPS 186–2[4]
- 2009년: FIPS 186–3[5]
- 2013년: FIPS 186–4[6]
- 2023년: FIPS 186–5[7]
FIPS 186-5 표준은 DSA를 사용한 서명 생성을 금지하고, 문서에 명시된 표준 구현 날짜 이전에 생성된 서명의 검증만 허용한다. 이는 EdDSA와 같은 새로운 서명 체계로 대체될 예정이다.[8]
DSA는 1991년 7월 26일에 출원되었고 현재 만료된 미국 특허 5231668에 의해 보호되며, 전 국가안보국(NSA) 직원인 데이비드 W. 크라비츠[9]에게 특허권이 주어졌다. 이 특허는 "미국 상무부 장관을 대표하는 미국"에 주어졌으며, NIST는 이 특허를 전 세계적으로 로열티 없이 사용할 수 있도록 했다.[10] 클라우스 P. 슈노르는 자신의 미국 특허 4995082(이 역시 현재 만료됨)가 DSA를 포함한다고 주장했지만, 이 주장은 논쟁의 여지가 있다.[11]
1993년, 데이브 바니사르는 정보 공개법(FOIA) 요청을 통해 DSA 알고리즘이 NIST가 아닌 NSA에 의해 설계되었다는 사실을 확인했다.[12]
OpenSSH는 2025년에 DSA 지원을 제거할 예정이라고 발표했다.[13]
3. 작동 방식
디지털 서명 알고리즘(DSA)은 공개 키 암호 시스템의 프레임워크 내에서 작동하며, 모듈러 지수화의 대수적 속성과 이산 로그 문제를 기반으로 하는 알고리즘이다. DSA는 공개 키와 개인 키로 구성된 키 쌍을 사용한다. 개인 키는 메시지에 대한 디지털 서명을 생성하는 데 사용되며, 생성된 서명은 서명자의 해당 공개 키를 사용하여 확인할 수 있다. 디지털 서명은 메시지 인증(수신자는 메시지의 출처를 확인할 수 있음), 데이터 무결성(수신자는 메시지가 서명된 이후로 수정되지 않았음을 확인할 수 있음) 및 부인 방지(발신자는 자신이 메시지에 서명하지 않았다고 거짓으로 주장할 수 없음)를 제공한다.
DSA 알고리즘은 키 생성, 키 분배, 서명, 서명 검증의 네 가지 연산으로 구성된다.
- 키 생성: 시스템 매개변수를 선택하고, 사용자별 공개 키와 개인 키를 계산한다.
- 키 분배: 서명자는 공개 키를 공개하고, 개인 키는 비밀로 유지한다.
- 서명: 메시지에 대한 서명을 생성한다.
- 서명 검증: 서명이 유효한지 확인한다.
3. 1. 키 생성
키 생성은 두 단계로 이루어진다. 첫 번째 단계는 시스템 매개변수를 선택하는 것이고, 두 번째 단계는 사용자별 공개 키와 개인 키를 계산하는 것이다.시스템 매개변수:
- 승인된 암호화 해시 함수 ''H''를 선택한다. 원래의 DSS에서는 ''H''가 항상 SHA-1이었지만, 현재의 DSS에서는 더 강력한 SHA-2 해시 함수 사용이 승인되었다.[6][14] 해시 출력의 가장 왼쪽 ''N'' 비트만 사용한다.
- 키 길이 ''L''을 선택한다. 원래의 DSS는 ''L''을 512에서 1024 사이의 64의 배수로 제한했다. NIST 800-57은 2010년(또는 2030년) 이후까지 보안 수명이 연장되는 키에 대해 2048(또는 3072)의 길이를 권장한다.[15]
- 이고 가 되도록 모듈러스 길이 ''N''을 선택한다. FIPS 186-4는 ''L''과 ''N''이 (1024, 160), (2048, 224), (2048, 256), 또는 (3072, 256)의 값 중 하나를 갖도록 지정한다.[6]
- ''N''비트 소수 ''q''를 선택한다.
- ''p'' - 1이 ''q''의 배수가 되도록 ''L''비트 소수 ''p''를 선택한다.
- 에서 정수 ''h''를 무작위로 선택한다.
- 를 계산한다. 드물게 인 경우 다른 ''h''로 다시 시도한다. 일반적으로 가 사용된다. 이 모듈러 지수 연산은 값이 커도 효율적으로 계산할 수 있다.
알고리즘 매개변수는 (''p'', ''q'', ''g'')이다. 이는 시스템의 여러 사용자가 공유할 수 있다.
사용자별 키:주어진 파라미터 집합을 바탕으로, 두 번째 단계에서는 단일 사용자의 키 쌍을 계산한다.
- 정수 ''x''를 에서 무작위로 선택한다.
- 를 계산한다.
''x''는 개인키이며, ''y''는 공개키이다.
3. 2. 키 분배
서명자는 공개 키 ''y''를 공개해야 한다. 즉, 신뢰할 수 있지만 반드시 비밀일 필요는 없는 메커니즘을 통해 수신자에게 키를 전송해야 한다. 서명자는 개인 키 ''x''를 비밀로 유지해야 한다.매개변수 (''p'', ''q'', ''g'')를 기반으로 키 페어를 생성한다.
- 0 < ''x'' < ''q''인 ''x''를 무작위로 선택한다.
- ''y'' = ''g''''x'' mod ''p''를 계산한다. ''x''와 ''y''의 대응은 1대1이며, ''x''로부터 ''y''를 계산하는 것은 비교적 쉽지만, ''y''로부터 ''x''를 계산하는 것은 실질적으로 불가능하다(이산 대수 문제). 즉, ''x''와 ''y''의 대응은 일방향 함수가 된다.
- 공개 키는 (''p'', ''q'', ''g'', ''y''), 비밀 키는 ''x''이다.
거듭제곱 잉여 ''h''(''p''–1)/''q'' mod ''p'' 및 ''g''''x'' mod ''p''의 효율적인 계산법이 존재한다. 거듭제곱#효율적인 알고리즘을 참조하라.
매개변수 (''p'', ''q'', ''g'', ''y'')는 타인과 공유된다. 예를 들어, 공개 키 기반 구조(PKI)를 사용하는 경우, 이들은 인증 기관(CA)에서 서명자의 정보와 관련되어 공개된다.
3. 3. 서명
메시지 m영어에 대한 서명 (r, s)는 다음과 같이 생성한다.1. {1 ... q-1영어}에서 정수 k영어를 무작위로 선택한다.
2. r := (gk mod p) mod q영어를 계산한다. 만약 r=0영어인 드문 경우에는 다른 무작위 k영어를 선택하여 다시 계산한다.
3. s := (k-1(H(m)+xr)) mod q영어를 계산한다. 만약 s=0영어인 드문 경우에는 다른 무작위 k영어를 선택하여 다시 계산한다.
서명은 (r, s)이다.
k영어와 r영어의 계산은 메시지별 새 키를 생성하는 것과 같다. r영어을 계산할 때의 모듈 지수 연산은 서명 작업에서 가장 계산 비용이 많이 드는 부분이지만, 메시지가 알려지기 전에 계산할 수 있다. 모듈 역수 k-1 mod q영어를 계산하는 것은 두 번째로 비용이 많이 드는 부분이며, 메시지가 알려지기 전에 계산할 수도 있다. 이는 확장 유클리드 알고리즘을 사용하거나 페르마의 소정리를 사용하여 kq-2 mod q영어로 계산할 수 있다.
해시 함수를 H영어, 서명할 메시지를 m영어이라고 하면, 구체적인 계산 절차는 다음과 같다.
1. 0 < k영어 < q영어인 k영어를 메시지마다 임의로 결정한다.
2. r=(gk mod p) mod q영어를 계산한다.
3. 만약 r=0영어인 경우에는 k영어를 다시 선택한다.
4. s=k-1(H(m)+xr) mod q영어를 계산한다(k-1영어은 유한체 Fq영어에서의 k영어의 역원이다).
5. 만약 s=0영어인 경우에는 k영어를 다시 선택한다.
6. (r, s)가 m영어에 대한 서명이 된다.
처음 두 단계는 메시지마다 키를 생성하는 단계이다. 거듭제곱 잉여 연산이 서명 과정에서 가장 계산량이 많은 과정이며, 메시지의 해시를 구하기 전에 계산된다. k-1 mod q영어가 그 다음으로 계산량이 많은 과정이며, 확장된 유클리드 호제법 또는 kq-2 mod q영어로 페르마의 소정리를 사용하여 계산될 수 있다.
3. 4. 서명 검증
- 0 < r < q 및 0 < s < q인지 확인한다.
- w := s-1 mod q를 계산한다.
- u1 := H(m) · w mod q를 계산한다.
- u2 := r · w mod q를 계산한다.
- v := (gu1yu2 mod p) mod q를 계산한다.
- 서명은 v = r일 때만 유효하다.
4. 알고리즘의 정당성
먼저, g영어 = h영어(p-1)/q mod p 이므로, 페르마의 소정리에 의해 g영어q ≡ hp-1 ≡ 1 (mod p)가 성립한다. g영어 > 0 이고 q 가 소수이므로, g영어는 위수 q를 갖는다.
서명자는 다음을 계산한다.
:s = k-1(H(m) + xr) mod q
따라서 다음이 성립한다.
:k ≡ H(m)s-1 + xrs-1 ≡ H(m)w + xrw (mod q)
g영어가 위수 q를 가지므로, 다음 역시 성립한다.
:gk ≡ gH(m)wgxrw ≡ gH(m)wyrw ≡ gu1yu2 (mod p)
마지막으로, DSA의 정당성은 다음으로부터 유도된다.
:r = (gk mod p) mod q = (gu1yu2 mod p) mod q = v
5. 취약점 및 안전성
DSA의 안전성은 이산 로그 문제의 어려움에 기반한다. DSA에서 서명 시 사용되는 임의 값 ''k''는 엔트로피(무작위성), 기밀성, 유일성이라는 세 가지 조건을 만족해야 한다. 이 중 하나라도 위반되면 공격자가 개인 키를 알아낼 수 있다.[16] 동일한 ''k'' 값을 두 번 사용하거나, 예측 가능한 값을 사용하거나, 여러 서명에서 ''k''의 몇 비트만 유출되어도 개인 키 ''x''가 노출될 수 있다.[17]
- 엔트로피: ''k''는 1부터 ''q''-1 사이에서 선택되며, 무작위성이 높을수록 좋다.
- 기밀성: ''k''는 서명 과정에서만 사용되는 비밀 값이며, 외부로 유출되어서는 안 된다.
- 유일성: 서로 다른 메시지에 대해 동일한 ''k'' 값을 사용해서는 안 된다.
''k'' 값이 유출되면, 공격자는 다음 식을 통해 비밀 키 ''x''를 계산할 수 있다.
:
2010년 12월, ''fail0verflow''라는 그룹은 소니가 플레이스테이션 3 소프트웨어 서명에 사용한 ECDSA 개인 키를 복구하는 데 성공했다. 이는 소니가 각 서명에 대해 새로운 랜덤 ''k''를 생성하지 않았기 때문에 발생한 문제였다.[18]
이러한 문제는 RFC 6979에 설명된 대로 개인 키와 메시지 해시로부터 결정론적으로 ''k''를 생성하여 방지할 수 있다. 이렇게 하면 ''k''가 각 메시지마다 다르고, 개인 키를 모르는 공격자에게 예측 불가능하게 된다.
6. 구현 라이브러리
참조
[1]
서적
Applied Cryptography
https://archive.org/[...]
Wiley
1996
[2]
웹사이트
FIPS PUB 186: Digital Signature Standard (DSS), 1994-05-19
http://www.itl.nist.[...]
[3]
웹사이트
FIPS PUB 186-1: Digital Signature Standard (DSS), 1998-12-15
http://csrc.nist.gov[...]
[4]
웹사이트
FIPS PUB 186-2: Digital Signature Standard (DSS), 2000-01-27
http://csrc.nist.gov[...]
[5]
웹사이트
FIPS PUB 186-3: Digital Signature Standard (DSS), June 2009
http://csrc.nist.gov[...]
[6]
웹사이트
FIPS PUB 186-4: Digital Signature Standard (DSS), July 2013
http://nvlpubs.nist.[...]
[7]
웹사이트
FIPS PUB 186-5: Digital Signature Standard (DSS), February 2023
https://nvlpubs.nist[...]
[8]
웹사이트
Digital Signature Standard (DSS)
https://csrc.nist.go[...]
U.S. Department of Commerce
2020-07-21
[9]
웹사이트
Dr. David W. Kravitz
https://web.archive.[...]
2013-01-09
[10]
문서
DSA and patents
https://lists.gnupg.[...]
Werner Koch
[11]
웹사이트
1994 Annual Report of CSSPAB
http://csrc.nist.gov[...]
2009-08-26
[12]
웹사이트
The RISKS Digest Volume 14 Issue 59
https://catless.ncl.[...]
2023-10-03
[13]
웹사이트
OpenSSH announces DSA-removal timeline [LWN.net]
https://lwn.net/Arti[...]
2024-01-11
[14]
웹사이트
FIPS PUB 180-4: Secure Hash Standard (SHS), March 2012
http://csrc.nist.gov[...]
[15]
웹사이트
NIST Special Publication 800-57
http://csrc.nist.gov[...]
[16]
웹사이트
The Debian PGP disaster that almost was
http://rdist.root.or[...]
2009-05-18
[17]
문서
DSA -value Requirements
https://rdist.root.o[...]
[18]
뉴스
Hackers Describe PS3 Security As Epic Fail, Gain Unrestricted Access
http://exophase.com/[...]
Exophase.com
2011-01-05
[19]
논문
How Perfect Offline Wallets Can Still Leak Bitcoin Private Keys
2015-01-02
[20]
간행물
FIPS PUB 186
http://www.itl.nist.[...]
1994-05-19
[21]
간행물
FIPS PUB 186-1
http://csrc.nist.gov[...]
1998-12-15
[22]
간행물
FIPS PUB 186-2
http://csrc.nist.gov[...]
2000-01-27
[23]
간행물
FIPS PUB 186-3
http://csrc.nist.gov[...]
2009-06
[24]
간행물
FIPS PUB 186-4
http://nvlpubs.nist.[...]
2013-07
[25]
웹사이트
FIPS 186-5: Digital Signature Standard (DSS)
https://csrc.nist.go[...]
NIST
2024-03-03
[26]
문서
Minutes of the Sept. 94 meeting of the Computer System Security and Privacy Advisory Board
http://csrc.nist.gov[...]
[27]
간행물
FIPS PUB 180-4
http://csrc.nist.gov[...]
2012-03
[28]
문서
The Debian PGP disaster that almost was
http://rdist.root.or[...]
[29]
문서
DSA k-value Requirements
https://rdist.root.o[...]
[30]
뉴스
Hackers Describe PS3 Security As Epic Fail, Gain Unrestricted Access
http://exophase.com/[...]
Exophase.com
2011-01-05
[31]
웹인용
FIPS PUB 186]: Digital Signature Standard (DSS), 1994-05-19
http://www.itl.nist.[...]
2012-04-07
[32]
웹인용
FIPS PUB 186-1: Digital Signature Standard (DSS), 1998-12-15
http://csrc.nist.gov[...]
[33]
웹인용
FIPS PUB 186-2: Digital Signature Standard (DSS), 2000-01-27
http://csrc.nist.gov[...]
[34]
웹인용
FIPS PUB 186-3: Digital Signature Standard (DSS), June 2009
http://csrc.nist.gov[...]
[35]
웹인용
FIPS PUB 186-4: Digital Signature Standard (DSS), July 2013
http://nvlpubs.nist.[...]
[36]
웹사이트
Dr. David W. Kravitz
http://www.certicom.[...]
2013-01-09
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com