RFC 6979는 DSA와 ECDSA 서명에 필요한 일회용 값 k를 난수 대신 개인키와 메시지 해시에서 HMAC으로 정하는 절차입니다. 만들어진 서명은 기존 검증기가 그대로 확인합니다. 이 글은 2026-10-27에 연 RFC 6979 본문(2013년 8월, Informational)으로 확인한 범위만 다룹니다.
확인 기준일 2026-10-27 · 다음 확인 예정 2026-11-26
왜 k를 난수로 두면 곤란할까?
원문 1절은 k가 균일하게 무작위여야 하며 약간의 치우침도 서명 방식에 대한 공격으로 이어질 수 있다고 경고합니다. 스마트카드 같은 환경에서는 좋은 난수를 얻기 어렵고, 난수 서명은 자동 시험도 어렵다고 적습니다.
| 요소 | 원문 내용(절) |
|---|---|
| 입력 | 개인키 x와 메시지 해시 h1 (3.2) |
| 초기값 | V는 0x01 반복, K는 0x00 반복 (3.2 b, c) |
| 핵심 연산 | HMAC_K로 K와 V 갱신 (3.2 d~g) |
| 거부 처리 | 범위 밖이면 K와 V를 갱신해 반복 (3.2 h) |
| HMAC_DRBG 관계 | SP 800-90A의 HMAC_DRBG 사례로 설명 (3.3) |
k는 어떤 순서로 만들어질까?
3.2절 절차는 h1=H(m)을 구한 뒤 V를 0x01 바이트열로, K를 0x00 바이트열로 시작합니다. 개인키 x와 h1 정보를 넣은 HMAC으로 K와 V를 두 번 갱신하고, V를 반복 해시해 필요한 길이의 T를 모아 k 후보로 씁니다. 범위에 맞지 않으면 갱신하고 반복합니다. 서명값의 성질은 EVM ecrecover 사용 시 서명 가변성과 도메인 분리를 확인하는 이유 글에, 다른 서명 방식은 비트코인 Schnorr 서명의 선형성이 주는 변화 글에 있습니다.
변형과 보안 고려는?
3.6절은 추가 데이터를 넣는 변형을 소개하되 공개된 시험 벡터로 검증할 수 없게 된다고 단점을 적습니다. 4절은 서명 때 난수원이 필요 없어지지만 키 생성에는 여전히 강한 난수가 필요하고, 부채널 대비를 권고한다고 설명합니다.
보안 면에서 얻는 것과 잃는 것은?
서명 때 난수가 필요 없어지면 난수 생성기의 결함이나 치우침이 서명을 약하게 만드는 경로가 줄어듭니다. 반면 4절은 이 방식이 HMAC_DRBG를 이용한 비무작위화이므로, 보안이 그 구성 요소의 성질에 기댄다고 설명합니다. 또 같은 입력에서 같은 계산이 반복되므로 부채널(전력·시간 측정) 공격에서는 오히려 유리해질 수 있어 방어 조치를 권고합니다. 3.6절의 변형은 이런 약점을 보완하려는 시도이지만 표준 시험 벡터와 대조할 수 없다는 비용이 있습니다. 결국 이 문서는 구현 선택의 근거이며 개인 지갑 사용자가 직접 설정할 항목은 아닙니다.
이 글에서 확인하지 못한 것은?
부록의 시험 벡터, 곡선별 구현 세부, 비트코인·이더리움 클라이언트의 실제 채택 여부는 이번에 확인하지 못했습니다. 본문 뒷부분 일부도 읽지 못해 5절 이후의 서술은 쓰지 않았습니다. 문서 분류가 Informational이라는 점은 표준 추적 문서가 아니라는 뜻이므로 참고용으로 읽는 것이 맞습니다. 정리하면 이 문서는 k를 정하는 규칙을 한 가지로 고정해 난수 의존을 없애는 방법이며, 서명 형식과 검증 쪽은 바뀌지 않습니다. 저자는 T. Pornin이고 발행은 2013년 8월입니다.
자주 묻는 질문
결정적 서명이면 같은 메시지의 서명은 항상 같나요?
표준 절차를 따르면 같은 개인키와 같은 메시지에 같은 k가 나옵니다. 추가 데이터를 넣는 변형은 표준 절차가 아닙니다.
검증하는 쪽도 이 절차를 알아야 하나요?
아닙니다. 원문은 서명이 표준 DSA·ECDSA와 호환되어 변경 없는 검증기가 확인한다고 적습니다.
비트코인과 이더리움이 이 방식을 쓰나요?
이번에 연 원문에는 특정 체인의 사용 여부가 없어 확인하지 못했습니다.



