맨위로가기

디지털 서명 알고리즘

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

디지털 서명 알고리즘(DSA)은 1991년 미국에서 제안된 공개 키 서명 표준으로, 키 생성, 키 분배, 서명, 서명 검증의 네 가지 연산으로 구성된다. DSA는 미국 정부의 요청에 따라 개발되었으며, 국립표준기술연구소(NIST)에 의해 연방 표준으로 채택되었다. DSA는 SHA-2 해시 함수군을 사용하고 더 큰 키 길이를 권장하는 등 여러 차례 개정되었으며, 2023년 FIPS 186-5 표준에서는 DSA를 사용한 서명 생성을 금지하고 기존 서명의 검증만 허용한다. DSA는 이산 로그 문제의 어려움에 기반하며, 동일한 k 값 사용 등의 취약점으로 인해 개인 키가 노출될 수 있다. OpenSSH는 DSA를 2025년에 제거할 예정이다.

더 읽어볼만한 페이지

  • 암호 알고리즘 - 이진 코드
    이진 코드는 0과 1을 사용하여 정보를 표현하는 시스템으로, 고대 중국의 주역에서 기원하며, 컴퓨터 과학, 통신 등 다양한 분야에서 활용된다.
  • 암호 알고리즘 - 메시지 인증 코드
    메시지 인증 코드(MAC)는 메시지 무결성을 보장하기 위해 사용되는 암호화 기법으로, 송신자와 수신자가 동일한 키를 공유하여 MAC 생성, 확인 과정을 거친다.
디지털 서명 알고리즘
디지털 서명 알고리즘 정보
유형디지털 서명
약자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 < L이고 N \leq |H|가 되도록 모듈러스 길이 ''N''을 선택한다. FIPS 186-4는 ''L''과 ''N''이 (1024, 160), (2048, 224), (2048, 256), 또는 (3072, 256)의 값 중 하나를 갖도록 지정한다.[6]
  • ''N''비트 소수 ''q''를 선택한다.
  • ''p'' - 1이 ''q''의 배수가 되도록 ''L''비트 소수 ''p''를 선택한다.
  • \{ 2 \ldots p-2 \}에서 정수 ''h''를 무작위로 선택한다.
  • g := h^{(p - 1)/q} \mod p를 계산한다. 드물게 g=1인 경우 다른 ''h''로 다시 시도한다. 일반적으로 h=2가 사용된다. 이 모듈러 지수 연산은 값이 커도 효율적으로 계산할 수 있다.


알고리즘 매개변수는 (''p'', ''q'', ''g'')이다. 이는 시스템의 여러 사용자가 공유할 수 있다.
사용자별 키:주어진 파라미터 집합을 바탕으로, 두 번째 단계에서는 단일 사용자의 키 쌍을 계산한다.

  • 정수 ''x''를 \{ 1 \ldots q-1 \}에서 무작위로 선택한다.
  • y := g^x \mod p를 계산한다.


''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''를 계산할 수 있다.

:s=k^{-1}(H(m)+xr)\bmod\,q

2010년 12월, ''fail0verflow''라는 그룹은 소니플레이스테이션 3 소프트웨어 서명에 사용한 ECDSA 개인 키를 복구하는 데 성공했다. 이는 소니가 각 서명에 대해 새로운 랜덤 ''k''를 생성하지 않았기 때문에 발생한 문제였다.[18]

이러한 문제는 RFC 6979에 설명된 대로 개인 키와 메시지 해시로부터 결정론적으로 ''k''를 생성하여 방지할 수 있다. 이렇게 하면 ''k''가 각 메시지마다 다르고, 개인 키를 모르는 공격자에게 예측 불가능하게 된다.

6. 구현 라이브러리


  • 보탄
  • 바운시 캐슬
  • 크립트립
  • 크립토++
  • libgcrypt
  • 네틀
  • OpenSSL
  • wolfCrypt
  • GnuTLS
  • Libsodium

참조

[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 k-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