기본 콘텐츠로 건너뛰기

ECC-9. 타원 곡선 디지털 서명 알고리즘(ECDSA)

타원 곡선 암호에서 디지털 서명은 타원 곡선 디지털 서명 알고리즘(ECDSA)을 통해 이루어집니다. 이는 메시지를 보낸 사람이 정말 본인인지(인증), 메시지가 위변조되지 않았는지(무결성), 그리고 서명한 사실을 부인할 수 없도록(부인 방지) 보장하는 기술입니다.

핵심 원리는 공개 키로는 할 수 없지만 개인 키(비밀 키)로만 쉽게 할 수 있는 수학적 연산을 이용하는 것입니다. 즉, 개인 키 소유자만이 유효한 서명을 생성할 수 있고, 다른 사람들은 해당 개인 키와 쌍을 이루는 공개 키를 이용해 그 서명이 올바른지 검증할 수 있습니다.

앨리스가 밥에게 메시지를 서명하여 보낸다고 가정해 보겠습니다.

1. 키 생성

먼저, 앨리스는 서명과 검증에 사용할 한 쌍의 키를 생성해야 합니다.

  • 공통 정보 공유: 서명자와 검증자는 모두 동일한 타원 곡선($E$)과 그 위의 기준점($G$)을 미리 알고 있어야 합니다. 이 정보는 공개되어 있습니다.
  • 개인 키 ($d_A$): 앨리스는 아무도 모르는 큰 정수 $d_A$를 자신의 개인 키로 선택합니다.
  • 공개 키 ($Q_A$): 앨리스는 기준점 $G$에 자신의 개인 키 $d_A$를 곱하여(타원 곡선 덧셈 연산) 점 $Q_A = d_A \cdot G$를 계산합니다. 이 $Q_A$가 앨리스의 공개 키이며, 모든 사람에게 공개됩니다.

핵심 보안: 공개 키 $Q_A$와 기준점 $G$를 안다고 해도 개인 키 $d_A$를 역으로 계산하는 것은 '타원 곡선 이산 대수 문제'라는 수학적 난제 때문에 사실상 불가능합니다.

2. 서명 생성

앨리스는 보내려는 메시지($m$)에 대해 다음과 같은 과정으로 서명($r, s$)을 생성합니다.

  1. 해시 계산: 메시지($m$)를 해시 함수(예: SHA-256)에 넣어 일정한 길이의 해시 값($h$)을 계산합니다. 이는 메시지의 '지문'과 같아서, 메시지가 1비트만 바뀌어도 해시 값이 완전히 달라집니다.
    • $h = \text{hash}(m)$
  2. 임의의 수 선택: 서명할 때마다 새로운 임의의 정수 $k$를 선택합니다. 이 값은 서명 과정에서만 사용되고 반드시 비밀로 유지되어야 합니다.
  3. 임시 점 계산: 기준점 $G$에 $k$를 곱하여 새로운 점 $(x_1, y_1) = k \cdot G$를 계산합니다.
  4. 서명 값 $r$ 계산: 계산된 점의 $x$ 좌표 값을 가져와 특정 수(모듈러)로 나눈 나머지를 $r$로 정합니다.
    • $r = x_1 \pmod n$ (여기서 $n$은 곡선의 특정 상수)
    • 만약 $r=0$이면, 다른 임의의 수 $k$를 선택하여 1~3 과정을 반복합니다.
  5. 서명 값 $s$ 계산: 다음 공식을 사용하여 $s$를 계산합니다.
    • $s = k^{-1} (h + r \cdot d_A) \pmod n$
    • $k^{-1}$는 $k$의 모듈러 역원이며, $d_A$는 앨리스의 개인 키입니다.
    • 만약 $s=0$이면, 다른 $k$를 선택하여 다시 계산합니다.

이제 앨리스는 원래 메시지($m$)와 함께 계산된 한 쌍의 값 ($r, s$)를 밥에게 보냅니다. 이 ($r, s$)가 바로 앨리스의 디지털 서명입니다.

3. 서명 검증

밥은 앨리스로부터 메시지($m$)와 서명($r, s$)을 받고, 앨리스의 공개 키($Q_A$)를 사용하여 이 서명이 유효한지 검증합니다.

  1. 해시 계산: 밥 역시 받은 메시지($m$)를 똑같은 해시 함수를 사용해 해시 값($h'$)을 계산합니다.
    • $h' = \text{hash}(m)$
  2. 중간 값 계산: 다음 두 값을 계산합니다.
    • $u_1 = s^{-1} \cdot h' \pmod n$
    • $u_2 = s^{-1} \cdot r \pmod n$
    • 여기서 $s^{-1}$는 받은 서명 값 $s$의 모듈러 역원입니다.
  3. 검증 점 계산: 앨리스의 공개 키($Q_A$)와 기준점($G$)을 사용하여 새로운 점 $(x_v, y_v)$를 계산합니다.
    •  $(x_v, y_v) = u_1 \cdot G + u_2 \cdot Q_A$
  4. 검증 완료: 계산된 점의 $x$ 좌표 값($x_v$)을 특정 수($n$)로 나눈 나머지가 앨리스가 보낸 서명 값 $r$과 일치하는지 확인합니다.
    • 만약 $x_v \pmod n = r$ 이라면 서명은 유효합니다.
    • 그렇지 않다면 서명은 유효하지 않으며, 메시지가 위조되었거나 서명자가 앨리스가 아님을 의미합니다.

이러한 과정을 통해 밥은 메시지를 보낸 사람이 앨리스의 개인 키 소유자임을 수학적으로 확신할 수 있게 됩니다.


댓글

이 블로그의 인기 게시물

Windows에 AMP와 MediaWiki 설치하기

1. 들어가기     AMP는 Apache + MySQL +  Perl/PHP/Python에 대한 줄임말이다. LAMP (Linux + AMP)라고 하여 Linux에 설치하는 것으로 많이 소개하고 있지만 Windows에서도 간편하게 설치하여 사용할 수 있다.       이 글은 Windows 7에 Apache + MySQL + PHP를 설치하고 그 기반에서 MediaWiki를 설치하여 실행하는 과정을 간략히 정리한 것이다. 2. MySQL     * 버전 5.6.12     1) 다운로드         http://dev.mysql.com/downloads/installer/         MySQL Installer 5.6.12         Windows (x86, 32-bit), MSI Installer         (mysql-installer-web-community-5.6.12.0.msi)     2) 다운로드한 MSI 파일을 더블클릭하여 설치를 진행한다.           설치 위치:                   C:\Program Files\MySQL               선택 사항:                       Install MySQL Products             Choosing a Se...

MATLAB Rutime 설치하기

MATLAB Rutime 설치하기 미설치시 에러 MATLAB Runtime 을 설치하지 않은 환경에서 MATLAB 응용프로그램이나 공유 라이브러리를 사용하려고 하면 아래와 같은 에러 메시지가 표시될 것입니다. 처리되지 않은 예외: System.TypeInitializationException: 'MathWorks.MATLAB.NET.Utility.MWMCR'의 형식 이니셜라이저에서 예 외를 Throw했습니다. ---> System.TypeInitializationException: 'MathWorks.MATLAB.NET.Arrays.MWArray'의 형식 이니셜라이저에서 예외를 Throw했습니다. ---> System.DllNotFoundException: DLL 'mclmcrrt9_3.dll'을(를) 로드할 수 없습니다. 지정된 모듈을 찾을 수 없습니다. (예외가 발생한 HRESULT: 0x8007007E) 위치: MathWorks.MATLAB.NET.Arrays.MWArray.mclmcrInitialize2(Int32 primaryMode) 위치: MathWorks.MATLAB.NET.Arrays.MWArray..cctor() --- 내부 예외 스택 추적의 끝 --- 위치: MathWorks.MATLAB.NET.Utility.MWMCR..cctor() --- 내부 예외 스택 추적의 끝 --- 위치: MathWorks.MATLAB.NET.Utility.MWMCR.processExiting(Exception exception) 해결 방법 이 문제를 해결하기 위해서는 MATLAB Runtime 을 설치해야 합니다. 여러 가지 방법으로 MATLAB Runtime 을 설치할 수 있습니다. MATLAB 이 설치되어 있는 경우에는 MATLAB 설치 폴더 아래에 있는 MATLAB Runtime 설치 프로그램을 실행하여 설치합니다. ...

Wi-Fi 카드 2.4GHz로만 동작시키기

Wi-Fi 카드 2.4GHz로만 동작시키기 별도의 Wi-Fi AP 장치를 두지 않고 아래와 같은 기기들로만 Wi-Fi 네트워크를 구성하고자 할 때 주변 기기들이 2.4GHz만 지원하기 때문에 PC에서 실행하는 AP가 항상 2.4GHz를 사용하도록 Wi-Fi 카드를 설정해 주어야 합니다. 기기 Wi-Fi 카드 주파수 대역 Wi-Fi Direct 지원 PC (Windows 10) 2.4GHz, 5GHz O 주변 기기들 2.4GHz X Wi-Fi 카드별 주파수 대역 선택 방법 Windows 시작 메뉴에서 설정 을 클릭합니다. Windows 설정 화면에서 네트워크 및 인터넷 을 클릭합니다. 설정 화면의 왼쪽 메뉴바에서 Wi-Fi 를 클릭합니다. 화면 오른쪽 관련 설정 구역에 있는 어댑터 옵션 변경 을 클릭합니다. 설정을 바꾸고자 하는 Wi-Fi 카드 항목을 선택하고 마우스 오른쪽을 누른 다음 속성 메뉴를 클릭합니다. 대화상자의 네트워킹 탭 화면에 있는 구성 버튼을 클릭합니다. 장치 속성 대화상자의 고급 탭 화면으로 이동합니다. 제시되는 속성 항목들은 제품별로 다르며 자세한 사항은 아래의 제품별 설명을 참고하여 값을 설정하시기 바랍니다. Intel Dual Band Wireless-AC 7265 기술 사양 주파수 대역: 2.4GHz, 5GHz 무선 표준: 802.11ac 주파수 대역 선택 장치 속성 대화상자에서 아래와 같이 선택합니다. Wireless Mode 1. 802.11a => 5GHz 4. 802.11b/g => 2.4GHz (이 항목 선택) 6. 802.11a/b/g => 2.4GHz, 5GHz Intel Dual Band Wireless-AC 8265 기술 사양 주파수 대역: 2.4GHz, 5GHz 무선 표준: 802.11ac 주파수 대역 선택 장치 속성 대화상자에서 아래와 같이 ...