KR100525124B1 - 전자 서명된 문서의 검증 방법 - Google Patents

전자 서명된 문서의 검증 방법 Download PDF

Info

Publication number
KR100525124B1
KR100525124B1 KR10-2003-0001627A KR20030001627A KR100525124B1 KR 100525124 B1 KR100525124 B1 KR 100525124B1 KR 20030001627 A KR20030001627 A KR 20030001627A KR 100525124 B1 KR100525124 B1 KR 100525124B1
Authority
KR
South Korea
Prior art keywords
signature
mod
electronic document
electronic
terminal
Prior art date
Application number
KR10-2003-0001627A
Other languages
English (en)
Other versions
KR20040064780A (ko
Inventor
이홍섭
이재일
이향진
권태경
송상훈
송주석
Original Assignee
한국정보보호진흥원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국정보보호진흥원 filed Critical 한국정보보호진흥원
Priority to KR10-2003-0001627A priority Critical patent/KR100525124B1/ko
Publication of KR20040064780A publication Critical patent/KR20040064780A/ko
Application granted granted Critical
Publication of KR100525124B1 publication Critical patent/KR100525124B1/ko

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N2201/00Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
    • H04N2201/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N2201/3201Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
    • H04N2201/3225Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title of data relating to an image, a page or a document
    • H04N2201/3233Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title of data relating to an image, a page or a document of authentication information, e.g. digital signature, watermark
    • H04N2201/3235Checking or certification of the authentication information, e.g. by comparison with data stored independently

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Storage Device Security (AREA)

Abstract

본 발명은 전자 서명된 문서의 검증 방법에 관한 것으로, 특히 전자 문서와 그 출력 문서를 함께 검증하고 처리할 수 있는 인프라를 구축하여 거래 당사자 간 전자 문서의 직접적인 양방향 처리의 활성화에 기여토록 하는 방안에 관한 것이다.
본 발명의 전자 서명된 문서의 검증 방법은 서명자 단말에서 출력 가능한 전자 서명을 전자 문서에 삽입하여 전송하는 과정과; 검증자 단말에서 상기 전송되는 전자 문서를 디지털 방식으로 출력하여 출력된 전자 문서의 검증을 요청하는 과정과; 증명자 단말에서 상기 출력된 전자 문서에 삽입되어 있는 전자 서명의 증명을 통해 해당 전자 문서를 검증하는 과정을 포함하여 이루어지는 것을 특징으로 한다.
본 발명에 의하면 대학, 동사무소 등과 같이 제 증명서를 발급하는 기관에 전자 서명된 문서의 안전한 출력화 및 검증 방안을 제공함으로써, 정보화 사회에서의 사용자의 편의성을 크게 높일 수 있다.
또한, 단순한 신원확인 용도에서 당사자 간 전자문서의 직접적인 양방향 처리를 구현함으로써, 전자서명의 활성화에 기여할 수 있다.

Description

전자 서명된 문서의 검증 방법{Method for Verifying Digitally Signed Documents}
본 발명은 전자 서명된 문서의 검증 방법에 관한 것으로, 특히 전자 문서와 그 출력 문서를 함께 검증하고 처리할 수 있는 인프라를 구축하여 거래 당사자 간 전자 문서의 직접적인 양방향 처리의 활성화에 기여토록 하는 방안에 관한 것이다.
일반적으로, 정보화 사회로 본격적으로 진입해 가는 과정에서 정보화의 역기능에 해당하는 정보 침해 문제가 심각하게 대두되고 있다. 개인 및 사회의 직·간접 자원들이 고도로 정보화되어 가고 있으며, 또한 각종 전자 문서의 유통이 본격화되면서 앞으로 정보침해로 인한 피해는 더욱 커질 것으로 예상된다.
현재 정보통신기술발전 및 고속인터넷 이용확산에 따라 사회 여러 분야에서 정보보호에 대한 수요가 폭발적으로 증가하고 있다. 세계 정보보호기술시장은 연평균 27% 이상의 고성장이 예상되며 2000년 110억 달러 규모에서 오는 2005년이면 연 300억 달러 규모에 이를 것으로 기대된다.
이에 국내·외의 정부 및 기업에서는 공개키 기반구조의 보급을 통하여 전자 서명된 문서의 유통을 활성화하기 위한 노력을 하고 있다. 즉, 전자서명 개념의 도입으로 인터넷과 같은 가상공간 상에서도 거래의 안전 신뢰성이 일부 보장되고 있다.
그러나 인터넷이 생활의 일부분이 되면서 많은 사용자들은 전자문서에 대한 개념과 그 활용 범위가 점점 확대되어, 과거에는 반드시 오프라인 방법(대면인증)을 통해서만 발급 가능했던 문서에 대해서도 이제는 전자문서 형태의 발급을 원하게 되었다. 즉, 전자서명을 이용한 응용서비스의 수요가 크게 잠재되어 있는 상황이라고 말할 수 있다.
하지만 전자 서명된 문서는 전자적인 형태로는 그 유효성을 검증할 수 있는 반면, 프린터 등을 통해서 출력된 오프라인 문서에 대해서는 유사한 수준의 유효성 검증 방법이 현재는 존재하지 않는다. 따라서 아직도 대부분의 거래는 실세계를 중심으로 이루어지고 있다.
본 발명은 전술한 바와 같은 문제점을 해결하기 위한 것으로 그 목적은, 서명자가 출력 문서상에 나타날 수 있는 출력 서명을 전자 문서에 삽입하여 전송하고 증명자가 출력된 전자 문서에 삽입되어 있는 출력 서명의 증명을 통해 해당 전자 문서를 검증하게 함으로써, 전자 문서와 그 출력 문서를 함께 검증하고 처리할 수 있는 인프라를 구축하여 거래 당사자 간 전자문서의 직접적인 양방향 처리의 활성화에 기여토록 하는데 있다.
상술한 바와 같은 목적을 달성하기 위한 본 발명의 전자 서명된 문서의 검증 방법은, 서명자 단말에서 출력 가능한 전자 서명을 전자 문서에 삽입하여 전송하는 과정과; 검증자 단말에서 상기 전자 문서를 디지털 방식으로 출력하여 출력된 전자 문서의 검증을 요청하는 과정과; 증명자 단말에서 상기 출력된 전자 문서에 삽입되어 있는 전자 서명의 증명을 통해 해당 전자 문서를 검증하는 과정을 포함하여 이루어지는 것을 특징으로 한다.
바람직하게는, 상기 전자 서명을 전자 문서에 삽입하여 전송하는 과정은 상기 서명자 단말에서 인증 방법에 의해 서명되어진 데이터들인 전자 문서의 주요 필드를 선택하는 단계와; 상기 주요 필드를 인코딩하여 데이터 매트릭스 코드를 생성하는 단계와; 상기 주요 필드에 대한 서명 매트릭스 코드를 생성하는 단계와; 상기 생성된 데이터 매트릭스 코드 및 서명 매트릭스 코드를 전자 문서에 삽입하여 전송하는 단계를 포함하여 이루어지는 것을 특징으로 한다.
또한 바람직하게는, 상기 서명 매트릭스 코드를 생성하는 단계는 상기 출력 가능한 전자 서명의 생성을 위한 매개 변수를 설정하는 단계와; 상기 설정된 매개 변수를 이용해 상기 주요 필드에 대한 전자 서명을 생성하는 단계와; 상기 생성된 서명 값을 인코딩하는 단계를 포함하여 이루어지는 것을 특징으로 한다.
바람직하게는, 상기 전자 서명을 위한 매개 변수를 설정하는 단계는 비트 길이가 512+256i(i=0,...,6)이 되는 큰 소수 p와, 비트 길이가 128+32j(j=0,...4)이고 이되는 소수 q, 군(group) Zp *에서 g=a(p-1)/q mod p(aZp *)인 위수 q의 유일한 순환 부그룹의 생성자 g, 및 Zp *에서 비밀키인 x를 생성하는 단계와; 상기 생성된 p, g, x를 이용하여 y=g-xmod p가 되는 공개키 y를 계산하고 해당 인증 기관으로부터 인증서를 발급받아 사용자 변수 z=h(CertData)의 해쉬 값을 계산하는 단계를 포함하여 이루어지는 것을 특징으로 한다.
또한 바람직하게는, 상기 전자 서명을 생성하는 단계는 임의의 랜덤 변수 k(0<k<q)를 선택하는 단계와; 상기 선택된 랜덤 변수 k를 이용하여 서명의 첫번째 값 r=h(gk mod p)를 계산하는 단계와; 상기 계산된 r을 이용하여 서명의 두번째 값 s=x(k-rh(z,m)) mod q를 계산하는 단계와; 상기 계산된 r, s와 인증서를 인증 서버로 전송하는 단계와; 상기 인증 서버에서 임의의 정수인 비밀키 t(0<t<q)를 선택하는 단계와; 상기 선택된 t를 이용하여 상기 전송된 s를 암호화한 s'=(s+t) mod q인 s'를 계산하는 단계와; 상기 계산된 s'를 서명자 단말로 전송하는 단계와; 상기 t를 이용하여 =y-t mod p가 되는 검증 허락값 를 계산한 다음 상기 r과 함께 저장하는 단계를 포함하여 이루어지는 것을 특징으로 한다.
또한 바람직하게는, 상기 증명자 단말에서 출력된 전자 문서를 증명하는 과정은 상기 검증자 단말로부터 전송되는 출력된 전자 문서의 비트열 r(0<r<q)과 s'(0<s'<q)를 검사하는 단계와; 상기 r을 인증 서버로 전송하여 검증 허락을 요청하는 단계와; 상기 인증 서버로부터 검증 허락값 가 수신되는 경우 사용자 변수 z=h(CertData)를 계산하는 단계와; 상기 계산된 z를 이용하여 중간값 u=rh(z,m) mod q를 계산하는 단계와; 상기 s'를 이용하여 증거값 w=ys' mod p를 계산하는 단계와; 상기 계산된 w와 u를 이용하여 v=h(wgu mod p)를 계산하는 단계와; 상기 계산된 v와 상기 r을 비교하여 v=r인 경우 해당 서명을 받아들이는 단계를 포함하여 이루어지는 것을 특징으로 한다.
더욱 바람직하게는, 서명자 단말과 인증 서버에서 검증자 단말의 수를 제한하기 위한 카운트 n의 정보를 송수신하는 단계와; 상기 서명자 단말에서 카운트 정보를 서명 매트릭스 코드에 암호화 하여 전자 문서에 삽입하는 단계와; 상기 인증 서버에서 증명자 단말로부터 검증 허락 요청이 수신되는 경우 상기 카운트 n을 감소시킨 후 n=0인지 여부를 확인하는 단계와; 상기 카운트 n이 0인 경우 검증 허락 요청을 거부하고 카운트 n이 0이 아닌 경우 내부에 저장하고 있는 검증 허락값 를 증명자 단말로 전송하는 단계를 더 포함하여 이루어지는 것을 특징으로 한다.
이하, 본 발명에 따른 실시예를 첨부한 도면을 참조하여 상세하게 설명하면 다음과 같다.
도 1은 전자 서명된 문서의 안전성·신뢰성 있는 출력화 및 검증을 위한 시스템 구성을 도시한 도면이다.
상기 도 1의 시스템을 구현하기 위한 구체적인 프로토콜의 초안을 한국 표준 전자서명 알고리즘인 KCDSA를 바탕으로 하여 설계하였으며, 해당 시스템은 서명자 단말(이하 '서명자'라고만 칭함)(10)과 인증 서버(20), 검증자 단말(이하 '검증자'라고만 칭함)(30) 및 증명자 단말(이하 '증명자'라고만 칭함)(40)로 구성되어 각 구성 블럭간에 제안 프로토콜을 수행함으로써, 전자 서명된 문서의 안전성·신뢰성 있는 출력화 및 검증을 위한 목적을 달성할 수 있다. 특히, 본 발명에서는 제안 프로토콜에 대한 구체적인 설계를 완수하였으며, 안전성에 대한 분석도 병행하였다.
상기 서명자(10)는 인증 서버(20)와 연동하여 전자 문서의 서명을 생성하고 서명된 문서를 검증자(40)에게 전송한다.
검증자(40)는 상기 서명자(10)로부터 전송되는 전자 문서를 인쇄한 후, 증명자(30)에게 그 출력된 문서의 유효성 검증을 요청한다.
증명자(30)는 상기 인증 서버(20)와 연동하여 출력(인쇄)된 전자 문서상의 서명을 검증한다.
상기 각 구성 블럭간의 관계에 대한 요구사항은 다음과 같다.
서명자(10)는 검증 과정을 제어하는 인증 서버(20)를 신뢰하지만 인증 서버(20)로 주요 자료를 알려줄 필요는 없으며, 검증자(40)에게 서명된 문서의 출력을 요구한다. 또한, 서명자(10)는 증명자(30)와 검증자(40)가 서명된 문서를 조작할 가능성을 고려하여 해당 증명자(30) 및 검증자(40)를 신뢰하지 않는다. 이것은 무결성의 개념을 내포하고 있다.
인증 서버(20)는 서명을 생성하는 서명자(10)를 신뢰하지만, 증명자(30)와 검증자(40)가 서명된 문서를 조작할 가능성을 고려하여 해당 증명자(30)와 검증자(40)를 신뢰하지 않는다. 이것은 무결성의 개념을 내포하고 있다.
증명자(30)는 검증 과정을 제어하는 인증 서버(20)를 신뢰하지만 인증 서버(20)에 주요 자료를 알려줄 필요는 없으며, 서명자(10)가 서명한 문서를 재사용하거나 수정할 수 있다는 가정하에서 검증자(40)를 신뢰하지 않는다.
검증자(40)는 서명을 생성하는 서명자(10)를 신뢰하고, 증명자(30)에게 서명자가 서명한 전자 문서를 검증하게 한다.
상기와 같이, 전자 서명된 문서의 안전성·신뢰성 있는 출력화 및 검증을 위한 시스템에는 확실한 두 가지의 경로가 있다. 첫 번째 경로인 서명자(10)와 인증 서버(20) 및 증명자(30)간의 경로는 인쇄할 수 있는 서명을 제어하기 위한 경로이며, 두 번째 경로인 서명자(10)와 검증자(40) 및 증명자(30)간 경로는 서명 처리를 완성하기 위한 경로이다.
시스템에서 각 구성 블럭들이 상호 연결성을 갖도록 하기 위해, 상기 첫번째 경로는 문서의 비밀성을 제공하고, 두번째 경로는 문서의 무결성을 제공한다. 다시 말하면, 서명자(10)와 증명자(30)는 상기 첫번째 경로에서 제공받는 비밀성에 의해 인증 서버(20)에게 문서를 알려주지 않아도 되며, 나아가 서명자(10)와 증명자(30)는 두번째 경로에서 제공받는 무결성에 의해서 검증자(40)가 문서를 수정할 수 없다고 믿는다.
시스템의 각 구성 블럭들은 상기 요구 사항들에 의해 분류되어졌다고 간주한다. 그러나 융통성에 대한 언급을 위해 다음의 경우를 고려해 본다. 즉, 상기 요구 사항들이 정확히 적용되어진 경우 각 개체들은 분류되어 진다. 그러나, 상기 인증 서버(20)에서 신뢰하는 것처럼 증명자(30)도 서명자(10)를 신뢰하는 경우 서명자(10)와 인증 서버(20)는 동일한 개체일 수 있고, 서명자(10)와 증명자(30)가 동일한 개체일 수 있으며, 서명자(10)와 인증 서버(20) 및 증명자(30)가 동일한 개체일 수 있다.
다음으로, 시스템에 적용되는 프로토콜에 대하여 상세하게 설명하면, 일반적으로 프로토콜(P)은 첨부한 도면 도 2에 도시된 바와 같이 서명 생성과 서명 처리 및 서명 인증으로 구성된다.
상기 서명 생성 과정(Signature generation)에서 서명자(10)는 인증 서버(20)와 연동을 통해 전자문서(11)를 생성하고, 전자 문서(11)의 주요 필드(Primary Fields)(12)를 선택한 다음, 주요 필드(12)를 바코드에 인코딩하여 데이터 매트릭스(Matrix) 코드(13)를 생성한다. 그리고, 주요 필드(12)에 대하여 전자 서명을 하고, 해당 서명값을 바코드에 인코딩하여 서명 매트릭스 코드(14)를 생성하고, 전자 문서(11)에 데이터 매트릭스 코드(13) 및 서명 매트릭스 코드(14)를 삽입하여 출력(인쇄) 가능한 서명을 생성한다.
상기 서명 처리 과정(signature transaction)에서 서명자(10)와 검증자(40)는 전자 문서의 전자 서명(디지털 서명)을 증명하고, 디지털 방식으로 서명 받은 문서를 인쇄한다.
상기 서명 증명 과정(signature verification)에서 증명자(30)는 인쇄된 문서(11')의 매트릭스 코드(13,14)를 스캔(scan)하여 데이터 매트릭스 코드(13)의 주요 필드(12)를 증명하며, 주요 필드(12)의 전자 서명을 증명한다.
상기 주요 필드(12)란 인증방법에 의해 서명되어진 데이터들을 의미한다. 본 발명은 선택된 데이터들만 인쇄할 수 있는 서명을 생성하기 위한 것이기 때문에, 전체 데이터를 서명할 필요는 없다. 증명자(30)가 인쇄된 문서(11')에서 쉽게 주요 필드(12)들을 알아낼 수 있기 때문에, 주요 필드(12)에는 원래의 전자 문서(11)에 대한 정보가 명확히 기재되어 있어야 한다.
누구나 전자 문서(11)의 모든 데이터의 서명을 생성할 수 있다. 데이터 매트릭스 코드(13)는 문서 확인 정보에 의해 주요 필드(12)들을 인코딩한다. 마지막으로 서명 매트릭스 코드(14)는 데이터 매트릭스 코드(13)에서 인쇄할 수 있는 서명을 암호화한다. 두 매트릭스 코드(13,14)는 원래의 전자 문서(11)에서 인쇄되어지도록 만들어져야 한다.
다음으로, 본 발명의 일 실시예로서 전자 서명 기술에 대하여 설명하면 다음과 같다. 전자 서명 기술들은 전자 문서를 위한 전자 서명과, 인쇄되어 출력된 문서를 위한 전자 서명을 위해 사용되어진다. 따라서, 전자 서명 기술들은 인쇄되어 출력된 문서에 적용되는 경우 다음과 같은 소정의 요구 사항들을 만족시키기 위해 수정된다.
즉, 출력된 문서를 위한 전자 서명에 있어서 서명자(10)는 서명 생성 단계에서 인증 서버(20)에게 주요 자료를 알려주어서는 안된다. 그리고, 검증자(40)는 서명 처리 단계에서 데이터 매트릭스를 수정할 수 없고, 서명 매트릭스를 수정할 수 없다. 또한, 검증자(40)에게 서명된 문서로의 접근이 허락되지 않는다면 검증자(40)는 문서를 재사용할 수 없다.
증명자(30)는 서명 증명 단계에서 인증 서버(20)에게 주요 자료를 알려주어서는 안되며, 서명 증명이 끝난 후에 데이터 매트릭스 및 서명 매트릭스를 수정할 수 없다. 또한, 증명자(30)에게 서명된 문서로의 접근이 허락되지 않는다면 증명자(30)는 문서를 재사용할 수 없다.
다음으로 상기 매트릭스 코드에 대하여 상세하게 설명하면 다음과 같다.
본 발명에서는 적절한 암호화와 코드 표시 방법을 사용한다. 상기 매트릭스 코드(M)에는 데이터 매트릭스 코드와 서명 매트릭스 코드가 있다.
데이터 매트릭스 코드에는 주요 자료 필드와 인쇄된 문서 특정의 정보(예컨대, 문서의 시리얼 넘버(serial number)와 유효 기한)가 암호화된다. 그리고, 서명 매트릭스 코드에는 주요 자료에 대한 전자 서명 값이 인코딩된다.
본 발명에서는 일 실시예로서 출력 가능한 전자서명 프로토콜로서 KCDSA를 사용하는데, 다른 전자서명 알고리즘도 같은 목적을 위해 사용 가능하다.
이하, KCDSA(Korean Certificate-based Digital Signature Algorithm)에 대하여 설명한다.
KCDSA은 ElGamal 서명 방법 중의 하나로서 유한체(finite field)에서 이산 로그(discrete logarithm) 문제의 어려움에 기반한 것이다. ElGamal 서명 알고리즘을 변형시킨 것 중에 잘 알려진 것으로서 DSS(Digital Signature Standard)와 GOST 34.10이 있다.
KCDSA의 데이터 형 변환에 있어서 정수 비트열 간의 변환에 대하여 설명하면, 비트 길이 n의 정수 x를 비트열(bit string)로 변환할 때는 x를 이진표기로 표현한 후 최상위 비트를 첫 비트로, 최하위 비트를 마지막 비트로 삼는다. 즉,
x = xn-12n-1 + xn-22n-2 + ... +x12 +x0->{x n-1xn-2...x0}
마찬가지로 길이 n의 비트열은 다음과 같이 정수로 변환할 수 있다.
{x0x1...xn-1}-> x = x02n-1 + x12 n-2 + ... +xn-22 +xn-1
다음으로, 비트열 간의 변환에 대하여 설명하면, 길이 n의 비트열 {b0b1...+bn-1}의 바이트열 변환은 n이 8의 배수가 될 때까지 최상위 부분에 필요한 만큼의 0을 채운 다음 최상위 8비트를 첫 바이트로 마지막 8 비트를 마지막 바이트로 삼는다. 즉,
{b0b1...+bn-1} -> {x0x1...+xt-1}
여기서, t는 변환된 바이트열의 길이로서 실수 n/8 보다 크거나 같은 최소 정수이며, 0보다 큰 i에 대해 xt-i=bn-8ib + n-8i + 1...bn-8i+7로 주어지고 x0의 최상위 일부 비트는 0으로 채워질 수 있다. 마찬가지 방법으로 길이 n의 바이트열은 길이 8n의 비트열로 변환될 수 있다.
KCDSA는 인증서 기반 부가형 전자서명 방식이다. 전자서명의 안전성을 위하여 서명 검증 과정에서 사용되는 공개 검증키 및 도메인 변수들이 올바른 값인지를 확인할 필요가 있다. 이것은 사용자들 상호간에 신뢰할 수 있는 제3자(CA)가 도메인 변수, 사용자의 공개 검증키, 사용자의 식별자, 유효기간 등이 포함된 공개 검증키 확인 정보에 공개 검증키 인증기관이 자신의 비공개 서명키로 전자서명을 하여 발행해 주는 인증서를 사용함으로써 가능하다.
인증서의 발급시 제3자(CA)는 사용자의 신원을 확인한 후 인증 받고자 하는 공개 검증키에 대응하는 비공개 서명키를 사용자가 알고 있는지를 확인하는 과정이 포함되어야 한다. 일반적으로 인증서 형식은 국제표준으로 제정되어 있는 ITU-T Rec. X.509에 정의된 것을 사용하고 있다.
다음으로, 도메인 변수 p, q, g는 특정 그룹 내에서 합의가 되면 공통으로 사용할 수 있다. 이 경우 해당 그룹의 보안 담당자는 응용분야의 중요성에 따라 소수 p, q의 길이를 선택해야 한다. 현재 대부분의 서명의 응용에서 권고되는 소수 p, q의 길이는 대략 |p| = 1024, |q| = 160 정도이다. 그러나 매우 중요한 응용에 사용되는 서명의 경우는 (예를 들면 최상위 인증기관의 서명키) 2048비트의 P와 256비트 정도의 q를 사용하도록 권고한다. 또한 이 경우 소수 p, q가 적법한 절차에 의해 생성되었다는 것을 사용자들이 검증할 수 있도록 필요한 검증 데이터를 제공하여야 한다.
전자서명을 위한 도메인 변수 p, q, g는 이산대수 문제에 바탕을 둔 Diffie-Hellman 형의 키 분배 방식을 위해서도 사용할 수 있다. 그러나 같은 도메인 변수를 서로 다른 용도에 공통으로 사용하는 것은 바람직하지 않다고 보는 것이 일반적 견해이다. 특히, 도메인 변수는 공통으로 사용하더라도 비공개 서명키 및 공개 검증키를 키 분배를 위해서 사용하는 것은 피할 것을 강력히 권고한다.
KCDSA는 서명 생성 과정과 서명 검증 과정으로 이루어지는데, 서명 생성 과정에서는 메시지 M을 입력으로 받아 다음 단계를 거쳐 계산된, 비트열 r과 정수 s의 쌍으로 구성된 = {r, s}를 서명으로 출력한다. 상세하게는, 도메인 변수 p, q, g와 공개 검증키 y가 올바른지 검증하고, 난수 값 k를 {1, … , q-1}에서 랜덤하게 선택하며, 증거 값 w = gk mod p를 계산한다.
그리고, 서명의 첫 부분 r = h(w)를 계산하고, z = y mod 2l을 계산해서, 해쉬 코드 H = h(z || M)을 계산한 다음, 중간 값 e = (r H) mod q를 계산한다.
그 후, 서명의 두 번째 값 s = x(k - e) mod q를 계산(만약 s=0 이면 다시 난수 값 k를 선택한다.)하여 비트열 r과 정수 s의 쌍, = {r, s}를 서명으로 출력한다.
상기 도메인 변수와 공개 검증키에 대한 검증은 최초에 한 번만 수행하고 그 후 서명 생성시 마다 사용할 수 있도록 p, q, g 및 y를 안전하게 보관할 수 있으며, 상기 난수 값 k 선택부터 서명의 첫 부분 r을 계산하는 과정은 서명할 메시지와 관계가 없으므로 사전에 계산해 둘 수도 있다.
즉, k와 r을 미리 계산해서 안전하게 보관하고 있다가 서명할 메시지가 들어오면 실시간으로 사용자 변수 z의 계산을 할 수 있다. 이런 사전 계산 방식은 다수의 서명을 실시간으로 계산할 필요가 있을 때 유용하게 사용될 수 있으며, 이를 위해서는 사전 계산된 k, r을 저장할 여분의 안전한 메모리를 갖추어야 한다.
상기 r=h(w)에서 w는 정수이므로 이를 비트열로 변환한 후 해쉬 함수의 입력으로 주어야 한다. 그리고, 상기 중간 값 e의 계산에서 비트열 r과 비트열 H를 비트 단위 XOR연산을 하고 그 결과 비트열을 정수로 변환한다.
다음으로, 서명 검증 과정에서 먼저 서명을 검증하기 전에 검증자(40)는 서명자(10)의 공개 검증키 y와 도메인 변수 p, q, g 등에 대한 올바른 값들을 얻어야 한다. 이를 위해 신뢰할 수 있는 인증기관에서 발행한 서명자(10)의 인증서를 확인하고 이로부터 추출된 도메인 변수 p, q, g와 공개 검증키 y를 얻어내는 방법을 사용 할 수 있다.
상세하게는, 선택 사항으로 서명자(10)의 인증서를 확인하고, 서명 검증에 필요한 도메인 변수 p, q, g와 공개 검증키 y 를 추출하고, 수신된 서명 ' = {r',s'}에 대해 비트열 r'이 해쉬 함수의 출력길이와 같은지 확인하며, 0< s'< Q 임을 확인한다.
그리고, z = y mod 2l을 계산해서 검증할 메시지 M'에 대한 해쉬 코드 H' = h(z || M')을 계산하고, 중간 값 e'= (r' H') mod q를 계산하며, 서명자의 공개 검증키 y를 이용하여 증거 값 w' = ys'ge' mod p를 계산한 다음, h(w') = r'이 성립하는지 확인한다.
상기 검증 과정이 모두 통과되면 서명 '는 수신 메시지 M'에 대하여 공개 검증키 y에 대응하는 비공개 서명키 x로 서명하였음이 검증된 것이다. 위에서 M' = M, s'= s일 때, h(w') = r'이 되는 과정을 설명하였다.
위 검증 단계에서 하나라도 그 검증이 실패하면 메시지 M'에 불법적인 방법으로 서명이 되었거나 메시지가 변경된 것이므로 다음 단계로 넘어갈 필요 없이 M'에 대한 서명이 거짓임이 밝혀진 것이다.
상기와 같이 KCDSA는 ElGamal 서명 방법 중의 하나로서 유한체(finite field)에서 이산 로그(discrete logarithm) 문제의 어려움에 기반한 것이다. ElGamal 서명 알고리즘을 변형시킨 것 중에 잘 알려진 것으로서 DSS(Digital Signature Standard)와 GOST 34.10이 있다.
본 발명은 일 실시예로서 KCDSA를 전자 문서를 위한 전자 서명과 인쇄된 문서를 위한 전자 서명에 대한 기본 서명 알고리즘으로 사용한다. 전자 문서를 위한 전자 서명에 대해서는 전술한 KCDSA를 변경 없이 그대로 사용할 수 있으나 인쇄된 문서를 위한 전자 서명을 위해서는 해당 필요 조건들 때문에 신중하게 변경하여 사용한다.
이하, 첨부한 도면을 참조하여 인쇄된 문서를 위한 전자 서명 알고리즘에 대하여 설명한다.
출력 가능한 KCDSA(Printable KCDSA: P-KCDSA)는 인쇄된 문서를 위한 전자 서명의 필요 조건들을 만족시키기 위해 KCDSA를 변경시킨 것이다. 도 3에서 {} 괄호 내의 메시지는 비밀성을 위해 수신자의 공개키로 암호화된 것을 뜻하고, [] 괄호 내의 메시지는 무결성을 위해 MAC(Message Authentication Code) 또는 전자 서명이 포함된 것을 뜻한다. P-KCDSA의 주 목적은 도 3에서 출력된 문서로 전달되는 경로의 r과 s'의 무결성을 보장하는 것이다.
P-KCDSA는 도 4에 도시된 바와 같이 매개 변수 설정 과정(S500)과 서명 생성 과정(S600)과 서명 검증 과정(S700)으로 이루어진다.
먼저, 매개 변수 설정 과정(S500)을 도 5를 참조하여 설명하면, 클라이언트 개체인 서명자(10)는 매개변수 설정을 위해 다음 단계를 진행한다. 즉, |p| = 512 + 256i (i= 0, ..., 6) 이 되는 큰 소수 p를 선택한다(S511). |p|는 p의 비트 길이를 나타낸다.
그리고, |q| = 128 + 32j (j= 0, ...,4) 이고 q|(p-1)이 되는 소수 q를 선택하며(S512), 군(group) Zp *에서 g = a(p-1)/q mod p (a Zp *)인 위수(order)의 q의 유일한 순환 부그룹(unique cyclic subgroup)의 생성자(generator) g를 선택한다(S513).
그런 다음, Zp *에서 임의의 정수 x를 선택한다(S514). x는 KCDSA에서 비밀키이다.
그 후, y = g-x mod p 가 되는 공개키를 계산하고(S515), 인증기관으로부터 인증서를 발급받은 다음, z = h(CertData)와 같이 인증서로부터 해쉬 값을 계산한다(S516,S517). CertData는 서명자의 인증서 데이터이다.
다음으로, 서명 생성 과정(S600)을 도 6을 참조하여 설명하되, 서명자(10)가 임의 길이의 2 진수 메시지 m에 대하여 서명을 한다고 가정한다. 여기서, m은 데이터 매트릭스에 인코딩된 정보, 즉 주요 필드와 문서 관련 정보를 의미한다.
서명자(10)는 임의의 정수 k (0 < k < q)를 비밀리에 선택한 다음(S611), r = h(gk mod p)를 계산하고(S612), s = x(k - r h(z,m)) mod q를 계산한다(S613).
그리고, 트러스티드 서버(인증 서버)(20)에게 (r, s)와 인증서를 비밀성을 유지하여 전송한다(S614).
그러면, 인증 서버(20)는 임의의 정수 t (0 < t < q)를 비밀리에 선택한 다음(S615), s' = (s + t) mod q 를 계산하여(S616), 계산된 s'을 서명자(10)에게 인증할 수 있는 방법으로 전송한다(S617). 또한, = y-t mod p가 되는 검증 허락값인 를 계산하고 r과 함께 저장한다(S618).
메시지 m에 대한 서명자(10)의 출력 가능한 서명은 (id, r, s')이다. 서명자(10)와 인증 서버(20)가 임시 키 t를 공유할 때 s를 암호화한 것이 s'이다. t는 비밀키인데 이것에 대한 공개키 y-t는 암호화한 형태로 증명자(30)에게 다음 트랜잭션 때 전달된다.
나아가, 서명자(10)와 인증 서버(20)는 검증자(40)의 수를 제한하는 카운트 n의 정보를 주고받고, 마지막으로 서명자(10)는 카운트 정보를 서명 매트릭스 코드에 넣어 문서에 포함시킨다.
마지막으로, 서명 검증 과정(S700)을 도 7을 참조하여 설명하면, 메시지 m에 대한 서명자(10)의 서명(id, r, s')을 검증하기 위하여 증명자(30)는 다음 단계를 진행한다.
즉, 인증 기관을 통해 서명자(10)의 인증서를 구하여(S711), 메시지의 서명이 해당 서명자(10)에 의한 것인 지를 검증하고(S712), r (0 < r < q) 과 s' (0 < s' < q)를 검사한다(S713).
그리고, 인증 서버(20)에 상기 r을 인증된 방법으로 전송하여 검증 허락을 요청한다(S714).
그러면, 인증 서버(20)는 검증 회수에 제한이 없는지를 확인하여 제한이 없는 경우 검증 허락을 증명자(30)에게 비밀리에 보낸다. 인증 서버(20)가 서명자(10)와 카운트 n에 대한 정보를 주고 받았으면, 인증 서버(20)는 증명자(30)에게 검증 허락을 보낼 때에 카운트 n을 감소시킨다.
그리고, 만일 카운트 n이 0이 되면, 인증 서버(20)는 검증 허락을 거부한다. 여기서, r을 검증 허락을 만들기 위한 인덱스로 사용하였지만, 좀 더 구체적인 방법을 만들 수도 있을 것이다.
상기 검증 허락을 받은 증명자(30)는(S715), z = h(CertData)를 계산하고(S716), u = r h(z,m) mod q를 계산하며(S717), w = ys' mod p를 계산한다(S718).
그런 다음, v = h(wgu mod p)를 계산하여(S719), v = r이면 서명을 받아 들인다(S720,S721).
한편, KCDSA는 랜덤 오러클 모델(random oracle model)에서 안전하다고 가정한다. 이런 가정하에 수동적 공격자는 서명 트랜잭션의 정보를 획득할 수 없다. KCDSA의 안전도를 기초로 하여 어떻게 P-KCDSA가 인쇄된 문서의 전자 서명을 위한 필요 조건들을 만족시켜서 능동적 공격자의 공격을 저지할 수 있는 지를 설명한다.
능동적 공격자가 증명자(30)를 위장한 것을 위장 증명자(C')라하고, 서명자(10)와 검증자(40)의 비밀키들은 안전하다고 가정하여 다음 분석에서 위장 증명자(C')와 위장 검증자(D')를 고려한다.
서명자(10)는 서명 생성시에 인증 서버(20)에게 주 데이터를 공개하면 안된다. 즉, 인증 서버(20)에게 초기 서명 r과 s만을 전달하고, 인증 서버(20)는 r(=h(gk mod p))과 s(=x(k-rh(z,m)) mod q)만을 통하여서는 메시지 m에 대한 어떤 정보도 얻을 수 없다.
검증자(40)는 서명 트랜잭션에서 데이터 매트릭스를 변경할 수 없어야 한다. 즉, 데이터 매트릭스 정보는 서명자(10)에 의해 서명되고 서명 매트릭스로 코드화되며, 검증자(40)와 위장 검증자(D')는 서명 트랜잭션에서 x없이는 서명자(10)의 서명을 생성할 수 없다.
그리고, 검증자(40)는 서명 트랜잭션에서 서명 매트릭스를 변경할 수 없어야한다. 즉, 서명 매트릭스 정보는 s 대신에 s'과 r을 포함하고 있어, 검증자(40)는 서명을 검증할 수도 없고, 검증자(40)와 위장 검증자(D')는 미리 s 또는 t에 대한 정보를 갖지 않고서는 s'(s' = (s + t) mod q)에서 t를 제거할 수가 없다. 사실, 위장 검증자(D')는 {r, s}으로부터 s를 구할 수가 없기 때문에 s'에서 t를 얻을 수가 없다.
또한, 검증자(40)는 서명된 문서를 허락된 경우에만 재사용이 가능하다. 출력 가능한 서명을 사용하기 위해서 프로토콜에 항상 인증 서버(20)가 있어야 한다. 즉, 증명자(30)는 인증 서버(20)에게 서명에 대한 검증 허락을 요청해야 한다.
증명자(30)는 서명 검증 시에 주 데이터를 공개해서는 안 된다. 즉, 증명자(30)는 인증 서버(20)에게 서명 검증할 때에만 r을 제공하고, 검증자(40)는 r(=h(gk mod p))에서부터 m을 구할 수가 없다.
그리고, 증명자(30)는 서명 검증 후에 데이터 매트릭스 및 서명 매트릭스를 변경할 수 없어야 한다. 즉, 이산 로그 문제의 어려움처럼 증명자 단말은 (=y-t mod p)에서부터 t를 구할 수 없고, 위장 검증자(D')는 s가 암호화된 것이므로 s'에서 t를 구할 수 없으며, 검증자(40)와 위장 검증자(D')는 s'에서 t를 제거할 수 없다.
또한, 증명자(30)는 서명된 문서를 허락된 경우에만 재사용이 가능하다. 출력 가능한 서명을 사용하기 위해서 프로토콜에 항상 인증 서버(20)가 있어야 한다. 즉, 또 다른 증명자는 인증 서버(20)에게 서명에 대한 검증 허락을 요청해야 한다.
다음으로, 본 발명의 일 실시예에 따른 P-KCDSA 파라미터에 대하여 설명한다.
먼저, 검증자(40)가 수신한 서명 ' = {r', s'}가 메시지 M'에 대한 유효한 서명이면 검증 과정에서 h(w') = r'이 성립됨을 증명한다.
o 정리 : M' = M, r' = r, s' = s이면 h(w') = r'이다.
o 증명 : 가정 M'= M, r' = r에서 H' = h(z||M') = h(z||M) = H와 e' = (r' H') mod q = (r H) mod q = e를 얻을 수 있다. 또한, s' = s = x(k - e) mod q와 e' = e라는 사실에서부터,
w' = ys'ge' mod p = ysge mod p
= yx(k-e) mod qge mod p = g1/x x(k-e) mod qge mod p
= g(k-e) mod qge mod p = gk mod p 임을 알 수 있다.
즉, h(w') = h(gk mod p) = r이고, r' = r이므로 h(w') = r'이다.
다음으로, KCDSA에 사용될 수 있는 소수 p, q와 생성원 g를 생성하는 알고리즘에 대하여 설명한다.
소수 p와 q를 얻기 위해서는 소수 판정 알고리즘을 이용한다. 다음 알고리즘은 Gary L. Miller와 M. O. Rabin에 의한 방법으로, 이 알고리즘을 통과한 정수가 소수가 아닐 확률은 1/4n보다 작거나 같게 된다. 따라서 n이 50 (다른 값을 선택할 수도 있다) 정도이면 대부분의 경우 충분히 낮은 오류 확률을 준다.
소수 판정 알고리즘은, 제 1단계로서 w = 1 + 2am이 되는 a와 m을 구한다. 여기서, 2a는 w-1을 나누는 2의 가장 큰 멱승이고, 따라서 m은 홀수가 된다.
제 2단계로서 i = 1로 두고, n ≥50 을 선택한다. 제 3단계로서 1 < b < w인 난수 b를 만든다. 제 4단계로서 gcd(b, w) ≠1이면 하기의 제 7단계로 진행하여 알고리즘을 종료한다.
그리고, 제 5단계로서 z = bm mod w를 계산하고 z = 1이면 하기의 제 8단계로 진행한다. 제 6단계로서 j = 1,…, a-1인 동안 z = w - 1이면 하기의 제 8단계로 진행하고, z = z2 mod w를 계산한 다음, z = 1이면 하기의 제 7단계로 진행한다.
제 7단계로서 w는 소수가 아니므로 알고리즘을 끝내고, 제 8단계로서 i < n이면 i = i + 1로 하고 상기 제 3단계로 진행한다.
제 9단계로서 w는 소수일 가능성이 높으므로 소수라고 판정하고 해당 알고리즘을 종료한다.
상기 알고리즘에서 수행 시간을 줄이기 위해 제 1단계에서 w를 정해진 수의 작은 소수들(예를 들어 첫 1000개의 소수들)로 나누어 작은 소인수를 갖는지를 먼저 검사할 수도 있다. 또한, 제 2단계 ~ 제 6단계에서 n개의 |w|비트의 난수 b를 사용하는 대신에 첫 k개는 작은 소수들을, 나머지 n-k개는 |w|비트의 임의의 난수를 사용함으로써, 첫 k개의 멱승 계산 시 효율을 높일 수 있다(예를 들면 n = 50, k = 20).
다음으로, 소수 P, Q 생성 알고리즘에 대하여 설명한다.
KCDSA는 다음의 조건을 만족하는 두 소수 p, q를 필요로 한다.
(1) 2α-1 < P < 2α, (|p|=α), = 1024 + 256i(0 ≤i ≤4).
(2) 2β-1 < q < 2β, (|q|=β), = 160 + 32j(0 ≤j ≤3).
(3) q는 p-1을 나누고, (p-1)/2 q는 소수이거나 q보다 큰 소수들의 곱.
상기 조건 (1), (2)는 소수 p, q가 가질 수 있는 크기를 규정한 것이며, 조건 (3)은 p-1이 q 보다 작은 소인수들을 가질 때 가능한 공격들을 막기 위한 조건이다. 여기서는 소수 p, q가 J = (p - 1) / 2q도 역시 소수가 되도록 p, q를 생성하는 방법을 설명한다.
이때 J가 q보다 큰 소수이므로 먼저 소수 r을 찾은 후, 여러 개의 소수 q에 대해서 2Jq + 1이 소수인지를 판정함으로써 수행 속도를 빠르게 할 수 있다. 소수 p와 q의 생성시 필요한 난수의 발생에는 HAS-160을 사용할 수 있다.
임의의 비트열 시드(Seed)로부터 임의의 n비트 정수를 출력으로 내는 의사난수발생기를 다음과 같이 정의한다.
PRNG(Seed, n) = v0 + v12160 + . . . + vk-12(k-1).160 + vk2k.160
vi = HAS-160(Seed || i) for i = 0, 1, …, k-1
vk = HAS-160(Seed || k) mod 2r
여기서, k = n/160 , r = n mod 160을 나타내며, 시드(Seed)와 연접되는 i, k는 8비트 수로 표현한다. 또한, 비트열과 정수간의 변환이 필요할 때는 항상 변환규칙에 의거하여 적절히 변환된 후 연산이 일어나는 것으로 가정한다.
다음은 p = 2Jq + 1 (p, q, r은 소수)인 소수 p, q를 생성하는 알고리즘이다. 여기서 입력은 p의 비트 길이 α와 q의 비트 길이 β이며 출력은 소수 p,q,J, 증거값 시드(Seed) 및 카운트(count)이다.
제 1단계로서, 비트 크기의 임의의 비트열 시드(Seed)를 선택한다. 그리고, 제 2단계로서 상기 선택된 시드(Seed)를 난수 발생기 PRNG의 입력으로 하여 비트의 난수 u를 발생시킨다.(u = PRNG(Seed, α- β-4))
제 3단계로서 상기 u의 상위에 4비트 1000을 붙이고 최하위 비트는 1로 만들어 이를 J로 둔다.(J = 2α-β-1 ∨ u ∨ 1)
제 4단계로서 강한 소수 판정 알고리즘으로 J를 판정하여 소수가 아니면 상기 제 1단계로 진행한다. 제 5단계로서 카운트를 0으로 초기화하고, 제 6단계로서 카운트를 1 증가시키며, 제 7단계로서 상기 카운트가 224보다 크면 상기 제 1단계로 진행한다.
제 8단계로서 시드(Seed)에 카운트를 연접한 것을 PRNG의 입력으로 하여 β비트의 난수 u를 발생시킨다.(u = PRNG(Seed || count, β)
제 9단계로서 u의 최상위 및 최하위 비트를 1로 만들어 이를 1로 둔다.(q = 2β-1 ∨ u ∨ 1)
제 10단계로서 p = 2Jq + 1의 비트수가 보다 크면 상기 제 6단계로 진행하고, 제 11단계로서 강한 소수 판정 알고리즘으로 q를 판정하여 소수가 아니면 상기 제 6단계로 진행하며, 제 12단계로서 강한 소수 판정 알고리즘을 p를 판정하여 소수가 아니면 상기 제 6단계로 진행한다.
제 13단계로서 소수 p, q, J와 증거값 시드(Seed) 및 카운트(count)를 출력한다.
상기 제 7단계에서 카운트(Count)는 변환 규칙에 의거하여 4바이트의 비트열로 변환하여 사용하며, 상기 출력된 시드(Seed)와 카운트(Count)는 소수 p', q'가 이 알고리즘에 의해 적절히 생성되었다는 사실을 확인하는데 사용될 수 있다.
즉, 출력 시드(Seed)로 상기 제 2단계 ~ 제 3단계를 수행하여 생성한 J가 (p'-1)/2q'과 같은 소수임을 확인하고, 다시 시드(Seed)에 카운트(Count)를 연접한 값으로 상기 제 8단계 ~ 제 9단계를 수행하여 얻은 q가 주어진 q'과 같은 소수이고, 마지막으로 p = 2Jq + 1이 소수임을 확인한다.
한편, KCDSA를 구현하기 위해 필요한 생성원 g는 다음과 같이 p, q, J를 입력으로 받아 생성원 g를 출력하는 알고리즘에 의해 생성된다.
먼저, 제 1단계로서 p보다 작은 임의의 수 a를 발생시키고, 제 2단계로서 g = a2J mod p를 계산한다. 그리고, 제 3단계로서 g = 1이면 제 1단계로 진행하고, 제 4단계로서 g를 출력한다.
상기 알고리즘에서 출력된 g는 gq mod p = 1을 확인함으로써, 적절히 생성되었음을 확인할 수 있다.
다음으로, KCDSA를 위한 난수 값 x, k 생성에 대하여 설명한다.
KCDSA를 구현하기 위해서는 난수 혹은 의사난수(pseudo-random number)를 생성할 수 있어야 한다. KCDSA에서 사용자의 비공개 서명키 x (0 < x < q)와 각 메시지마다 다른 난수 값 k (0 < k < q)가 사용되는데, 이하 비공개 서명키 x를 생성하는 알고리즘과 여러 개의 난수 값 k와 r= h(gk mod p)의 사전 계산에 사용할 수 있는 알고리즘을 설명한다. 각 알고리즘에서 주어진 비트열로부터 |q|비트 길이의 의사난수를 발생시키는 데는 상기 정의된 의사난수발생기 PRNG(Seed, n)를 사용한다.
먼저, 서명자의 비공개 서명키 x를 생성하는 알고리즘에 대하여 설명하면, 다음과 같이 m개의 난수 값 xj (j=0, 1,..., m-1)를 생성하여 이 m개의 난수 값을 m명의 사용자에 대한 비공개 서명키로 쓸 수 있다.
제 1단계로서 b비트의 임의의 난수를 선택하여 X 키로 둔다. (단 b ≥|q|)
제 2단계로서 j = 0, 1, … , m-1에 대하여 다음을 계산한다.
XSEEDj = PRNG(optional user-provided random input, b)
XVAL = (XKEY + XSEEDj) mod 2b (|q| ≤ b ≤ B, B는 32의 배수)
xj = PRNG(XVAL, b) mod q
XKEY = XKEY + PRNG(xj + XSEEDj mod 2b, b) mod 2b
통상 사용자의 비공개 서명키는 각 사용자가 생성할 것이므로 상기 제 2단계에서 m은 대부분의 경우 1이 될 것이다. 비공개 서명키의 랜덤성이 규칙에 의존하는 알고리즘이나 기계적인 장치뿐만 아니라 사용자의 의사에 의해서도 영향을 받게 하기 위하여 사용자의 선택적인 입력 값을 사용한다. 사용자의 비공개 서명키는 한 번만 생성하는 것이고 그 사용자의 의사에도 의존하도록 하는 것이 당연하므로 사용자의 선택적인 입력 값 XSEED를 사용하는 것이 바람직하다.
상기 XSEED를 위한 사용자 입력은 엔트로피가 최소한 |q|비트 이상이 되도록 충분히 긴 난수를 제공 받아야 한다 (사용자 입력은 한 문자 당 1비트 정도의 엔트로피를 갖는 것으로 보는 것이 일반적이다). 그리고, XKEY는 처음 초기화 후 매 xj의 생성 때마다 갱신되는 비밀 상태 변수이다. 일단 비공개 서명키가 모두 생성되면 비밀 상태 변수 XKEY와 사용자의 비밀 입력 XSEEDj들은 안전하게 폐기시켜야 한다.
다음으로 k와 r, t와 를 미리 계산하는 알고리즘에 대하여 설명한다.
해당 알고리즘은 m개의 난수 값 k와 r = h(gk mod p)를 미리 계산해 두고, 이 값들을 사용하여 m개의 메시지에 서명하는 과정에 대한 것으로 전술한 난수 발생 알고리즘을 사용할 수 있으나, 난수 k의 발생에 매번 사용자 입력을 받는 것은 비실용적이므로 고정된 KSEED를 사용하며 이는 컴퓨터 내부에서 생성된 난수의 해쉬 값으로 계산한다. t와 = gt mod p는 h() 적용 이외에 동일하다.
해당 알고리즘은 제 1단계로서 b비트의 임의의 난수를 선택하여 KKEY로 두고(단, b ≥|q|), 제 2단계로서 KSEED = PRNG(optional machine-generated random input, b)를 계산하며, 제 3단계로서 j = 0, 1, … , m-1에 대하여 다음을 계산한다.
KVAL = KKEY + KSEED mod 2b
kj = PRNG(KVAL, b) mod q
KKEY = KKEY + PRNG(kj+ KSEED mod 2b, b) mod 2b
wj = mod p
rj = h(wj)
그리고, 제 4단계로서 M0, M1, … , Mm-1 을 서명할 m개의 메시지라고 가정하고, j = 0, 1, … , m-1에 대하여 다음을 계산한다.
Hj = h(z || Mj)
ej = (rj Hj) mod q
sj = x(kj - ej) mod q
Mj에 대한 서명은 {rj || sj}이다.
제 5단계로서 상기 제 3단계로 진행한다. 상기 제 3단계에서 다음 m개의 메시지에 서명하는데 필요한 값들 (k0, r0), (k1, r1), … , (k m-1, rm-1)을 미리 계산해 둔다. 상기 제 4단계에서는 m개 메시지 중 첫 메시지 M0가 준비되었다면 언제든지 시작될 수 있고, 실행 중에 다음에 서명할 메시지 Mj (0 < j ≤m-1)가 준비되지 않았다면 언제든지 실행을 중단할 수 있다.
또한, 제 3단계에서 계산된 {(ki, ri)}을 저장할 수 있는 길이 m의 배열 2개를 위한 메모리가 필요하다.
이 알고리즘에서 KSEED와 KKEY는 비공개 서명키 x와 같은 정도의 중요성을 가지므로 사용 중 절대로 노출되지 않도록 해야 한다. 일반적인 컴퓨팅 환경에서는 안전한 저장소가 없으므로, 비밀 값 KSEED와 KKEY는 이 알고리즘의 실행초기에 생성되어 계속 사용하다가 이 알고리즘을 사용하는 응용 프로그램이 종료되면 (다음 사용을 위해 파일이나 다른 저장소에 보관하는 것이 아니라) 안전하게 폐기시켜야 한다.
다음으로, 공개 검증키 y를 계산할 때 지수에서 필요한 x-1 mod q 값을 구하는 알고리즘에 대하여 설명한다.
제 1단계로서 i = q, h = x, v = 0, d = 1로 두고, 제 2단계로서 = [i / h], 제 3단계로서 c = h, 제 4단계로서 h = i-c, 제 5단계로서 i=c, 제 6단계로서 c=d, 제 7단계로서 d = v-c, 제 8단계로서 v=c, 다음으로 제 9단계에서 h가 양수이면 상기 2단계로 진행한다. 마지막으로 제 10단계에서 v가 x-1 mod q가 된다.
상기 제 10단계에서 v는 음수가 될 수도 있으므로 v가 0과 q사이의 정수가 되도록 교정해 주어야 한다.
다음으로, 서명, 공개 검증키 및 도메인 변수에 대한 ASN.1 표기에 대하여 설명한다.
상기 서명, 공개 검증키 및 도메인 변수에 대한 ASN.1 표기는 아래와 같이 정의할 수 있다.
P-KCDSASignatureValue ::= SEQUENCE {
r BIT STRING,
s INTEGER }
P-KCDSAParameters ::= SEQUENCE {
p INTEGER, -- odd prime p = 2Jq+1
q INTEGER, -- odd prime
g INTEGER, -- generator of order q
J INTEGER OPTIONAL, -- odd prime
Seed OCTET STRING OPTIONAL
Count INTEGER OPTIONAL }
P-KCDSAPublicKey ::= INTEGER -- Public key y
다음으로 KCDSA를 참조 구현하여 각 단계마다 얻을 수 있는 계산 값의 예에 대하여 설명한다. 하기의 계산 값들은 전자 서명 응용을 개발하는 경우 구현 결과에 대한 적합성을 확인하고자 할 때 기준 값으로 사용될 수 있다.
먼저, 소수 p, q와 생성원 g를 생성하는 알고리즘에 대한 참조 구현 값에 대하여 |p|=α=1024, |q|=β=160인 경우를 예를 들어 설명한다.
전술한 소수 p, q, 생성원 g 생성 알고리즘의 제 1단계에서 선택한 비트 크기의 임의의 비트열 Seed:
Seed = 68 ad b0 d1 b6 ae f1 44 a9 50
f3 e7 84 c9 89 3d 36 04 09 0e
제 2단계에서 발생시킨 비트의 난수 u:
u = PRNG(Seed, 860) = 0cfa55c3 2582e0d7 4a09ef55
c5d2acac 5b46e9f3 5470ac48 1d95438c 7f5cc107 1d4e0bc5
877e0a0f c6b30dc6 c743f238 9bc69b8f cb7affeb dea013f8
64c68ac2 cb8bd7b5 c434809f c6d1b62c d9f20bb1 a7fab58c
c3f5d2dc a511e2e4 077e9def 912141f8 47f8751d 1dc47f3d
제 3단계에서 생성한 J (제 4단계의 강한 소수 판정 알고리즘을 통과):
J = 2α-β-1 ∨ u ∨ 1 = 8cfa55c3 2582e0d7 4a09ef55
c5d2acac 5b46e9f3 5470ac48 1d95438c 7f5cc107 1d4e0bc5
877e0a0f c6b30dc6 c743f238 9bc69b8f cb7affeb dea013f8
64c68ac2 cb8bd7b5 c434809f c6d1b62c d9f20bb1 a7fab58c
c3f5d2dc a511e2e4 077e9def 912141f8 47f8751d 1dc47f3d
최종 카운트(Count) 값: Count = 5189 = 0x1445
제 8단계에서 생성한 비트의 난수 u:
Seed || Count = 68 ad b0 d1 b6 ae f1 44 a9 50 f3 e7
84 c9 89 3d 36 04 09 0e 00 00 14 45
u = PRNG(Seed || Count, 160)
= c3ddd371 7bf05b8f 8dd725c1 62f0b943 2c6f77fb
제 9단계에서 생성한 q (제 11단계의 강한 소수 판정 알고리즘을 통과)::
q = 2β-1 ∨ u ∨ 1
= c3ddd371 7bf05b8f 8dd725c1 62f0b943 2c6f77fb
제 10단계에서 생성한 p: p = 2Jq + 1 (제 12단계의 강한 소수 판정 알고리즘을 통과):
p = 2Jq + 1
= d7b9afc1 04f4d53f
737db88d 6bf77e12 cd7ec3d7 1cbe3cb7 4cd224bf f348154a
fba6bfed 797044df c655dcc2 0c952c0e c43a97e1 ad67e687
d10729ca f622845d 162afca8 f0248cc4 12b3596c 4c5d3384
f7e25ee6 44ba87bb 09b164fb 465477b8 7fdba5ea a400ffa0
925714ae 19464ffa cead3a97 50d12194 8ab2d8d6 5c82379f
상기 생성한 p, q, J를 이용하여 생성원 g를 구하는 예:
제 1단계에서 선택한 g:
g = random αbits = 1711797e cf9bc4b8
1c5ad487 b2d9f3d4 f4de8616 c47bb030 355ea4bf 2ab07104
0ee59c95 453119d7 68af7a79 95133c2d a1e302c6 9128afba
129e698d c7982f56 064c70c1 8fb523ba 826b76f8 1efa58a9
1226e6af c96e2010 97589940 8e785fe4 a338b398 065ffd22
2fd1e1b7 a1da01a0 90b84168 e3522241 d2855a4e fe87611a
제 2단계에서 계산한 g : g = a2J mod p (제 3단계의 테스트 통과)
g = a2J mod p = 50e414c7 a56892d1
ad633e42 d5cd8346 f2c09808 111c772c c30b0c54 4102c27e
7b5f9bec 57b9df2a 15312891 9d795e46 652b2a07 2e1f2517
f2a3afff 5815253a aefe3572 4cfa1af6 afce3a6b 41e3d0e1
3bed0eff 54383c46 65e69b47 ba79bbc3 339f86b9 be2b5889
4a18b201 afc41fe3 a0d93d31 25efda79 bc50dbbb 2c3ab639
다음으로 서명 생성 알고리즘의 수치 예에 대하여 상기 p, q, g를 이용하여 서명을 생성하는 예를 설명한다.
도메인 변수 p, q, g :
p = d7b9afc1 04f4d53f
737db88d 6bf77e12 cd7ec3d7 1cbe3cb7 4cd224bf f348154a
fba6bfed 797044df c655dcc2 0c952c0e c43a97e1 ad67e687
d10729ca f622845d 162afca8 f0248cc4 12b3596c 4c5d3384
f7e25ee6 44ba87bb 09b164fb 465477b8 7fdba5ea a400ffa0
925714ae 19464ffa cead3a97 50d12194 8ab2d8d6 5c82379f
q = c3ddd371 7bf05b8f 8dd725c1 62f0b943 2c6f77fb
g = 50e414c7 a56892d1
ad633e42 d5cd8346 f2c09808 111c772c c30b0c54 4102c27e
7b5f9bec 57b9df2a 15312891 9d795e46 652b2a07 2e1f2517
f2a3afff 5815253a aefe3572 4cfa1af6 afce3a6b 41e3d0e1
3bed0eff 54383c46 65e69b47 ba79bbc3 339f86b9 be2b5889
4a18b201 afc41fe3 a0d93d31 25efda79 bc50dbbb 2c3ab639
다음으로, 비공개 서명키 x 생성 알고리즘의 수치 예에 대하여 설명한다.
b=160
XKEY = f2072ce3 0a017656 8324564b fdbd7077 173b7e3f
Optional User-provided Random Input(160bytes) =
“saldjfawp399u374r098u98^%^%hkrgn;lwkrp47t93c%$89439859k”
“jdmnvcm cvk o4u09r 4j oj2out209xfqw;l*&!^#@U#*#$)(# z x”
“o957tc-95 5 v5oiuv9876 6 vj o5iuv-053,mcvlrkfworet”
XSEED = PRNG(Optional User-provided Random Input, 160)
= 524c2b44 27571044 17668b0f 332476d7 af9a8f77
XVAL = XKEY + XSEED mod 2160
= 44535827 3158869a 9a8ae15b 30e1e74e c6d60db6
PRNG(XVAL,160) = 068c4ef3 55d8b6f5 3eff1df6 f243f985 63896c58
x = PRNG(XVAL,160) mod q
= 068c4ef3 55d8b6f5 3eff1df6 f243f985 63896c58
공개 검증키 y및 z 생성의 예:
x-1 mod q = a614b9b6 d25986c5 3621f7bc bc3af2ff 8b426e67
y = gx-1 mod q mod p = 96dce0e7 b2f17009
3d9b51d2 ba782027 33b62c40 6d376975 8b3e0cbb a1ff6c78
727a3570 3cb6bc24 76c3c293 743dfee9 4aa4b9ef a9a17fa6
bf790ac2 5a82c615 23f50aba ac7b6464 7eb15c95 7b07f5ed
7d467243 089f7469 5cd58fbf 57920cc0 c05d4582 9c0a8161
b943f184 51845760 ed096540 e78aa975 0b03d024 48cbf8de
z = y mod 2l =
23 f5 0a ba ac 7b 64 64 7e b1 5c 95 7b 07 f5 ed
7d 46 72 43 08 9f 74 69 5c d5 8f bf 57 92 0c c0
c0 5d 45 82 9c 0a 81 61 b9 43 f1 84 51 84 57 60
ed 09 65 40 e7 8a a9 75 0b 03 d0 24 48 cb f8 de
서명될 메시지 M : 7비트 ASCII 코드 사용
M = “This is a test message for KCDSA usage!” =
54 68 69 73 20 69 73 20 61 20 74 65 73 74 20 6d
65 73 73 61 67 65 20 66 6f 72 20 4b 43 44 53 41
20 75 73 61 67 65 21
서명 생성 과정 :
① 난수 값 k생성 : b=160
KKEY = 552daa16 42b91114 f9952200 4fd4a0c3 c63ef69f
Optional Machine-generated Random Input(160bits) =
1b f1 23 b0 27 52 e2 c9 ed 81
51 74 69 f2 0b 0c 19 a9 97 a4
KSEED = PRNG(Optional Machine-generated Random Input, 160)
= b014bdc2 21ca3428 0c6f1998 072f745e e4a680e8
KVAL = (KKEY + KSEED) mod 2160
= 054267d8 6483453d 06043b98 57041522 aae57787
PRNG(KVAL,160) = 4b037e4b 573bb7e3 34cad0a7 0bed6b58 81df9e8e
k = PRNG(KVAL,160) mod q
= 4b037e4b 573bb7e3 34cad0a7 0bed6b58 81df9e8e
② 증거 값 w = gk mod p:
w = 0d2ace49 f0415880
843e4cff 2a224dcc a4d12a79 11323aac e1eaf5b4 f479a91f
94d01820 193d40a5 f71347e3 8f97ef41 8bd25959 879ea7f6
2d3fbaa7 e70a9d78 b8dc7933 00bbf669 0829961a ab4e59a8
410510da ada05ef8 7e48144d 6efe5075 29011382 38c84b5d
2c3f590c 06e1b918 7ee5d509 e15ccab2 c257d549 ac1a5086
③ 서명의 첫 부분 r = h(w) : w를 비트열로 변환 후 해쉬한 결과의 비트열
r = 8f 99 6a 98 ed a5 7c c8 d8 8a
a6 ff df ae a2 2f 39 d7 fa 8a
④ 메시지의 해쉬 코드 H = h(z || M) : z || M의 해쉬한 결과의 비트열
z = y mod 2l
= 23 f5 0a ba ac 7b 64 64 7e b1 5c 95 7b 07 f5 ed
7d 46 72 43 08 9f 74 69 5c d5 8f bf 57 92 0c c0
c0 5d 45 82 9c 0a 81 61 b9 43 f1 84 51 84 57 60
ed 09 65 40 e7 8a a9 75 0b 03 d0 24 48 cb f8 de
z || M = 23 f5 0a ba ac 7b 64 64 7e b1 5c 95 7b 07 f5 ed
7d 46 72 43 08 9f 74 69 5c d5 8f bf 57 92 0c c0
c0 5d 45 82 9c 0a 81 61 b9 43 f1 84 51 84 57 60
ed 09 65 40 e7 8a a9 75 0b 03 d0 24 48 cb f8 de
54 68 69 73 20 69 73 20 61 20 74 65 73 74 20 6d
65 73 73 61 67 65 20 66 6f 72 20 4b 43 44 53 41
20 75 73 61 67 65 21
H = af 3f b0 4b 07 03 c6 ea 56 08
d8 9b 38 c3 3b 35 9c bc a2 b0
⑤ 중간 값 e = (r H) mod q:
r H = 20a6dad3 eaa6ba22 8e827e64 e76d991a a56b583a
e = (r H) mod q
= 20a6dad3 eaa6ba22 8e827e64 e76d991a a56b583a
⑥ 서명의 두 번째 부분 s = x(k - e) mod q :
s = 541f7dc4 f92c65eb 7f63b6b4 f22177f1 ee2cf339
⑦ 서명 = {r, s}:
r = 8f 99 6a 98 ed a5 7c c8 d8 8a
a6 ff df ae a2 2f 39 d7 fa 8a
s = 541f7dc4 f92c65eb 7f63b6b4 f22177f1 ee2cf339
다음으로, 서명 검증 알고리즘의 수치 예에 대하여 설명한다.
검증자 단말은 수신된 메시지 M'과 서명 '으로부터 다음과 같은 과정들을 거쳐서 '이 공개키 y에 해당하는 비공개 서명키 x를 가진 서명자 단말에서 올바른 서명 생성 과정을 거쳐 만든 M'에 대한 올바른 서명임을 확인할 수 있다.
① 수신된 M', r', s'에 대해 : r', s'의 크기 확인
M' = 54 68 69 73 20 69 73 20 61 20 74 65 73 74 20 6d
65 73 73 61 67 65 20 66 6f 72 20 4b 43 44 53 41
20 75 73 61 67 65 21
r'= 8f 99 6a 98 ed a5 7c c8 d8 8a
a6 ff df ae a2 2f 39 d7 fa 8a
s'= 541f7dc4 f92c65eb 7f63b6b4 f22177f1 ee2cf339
② 검증할 메시지의 해쉬 코드 H' = h(z || M') :
z = y mod 2l
= 23 f5 0a ba ac 7b 64 64 7e b1 5c 95 7b 07 f5 ed
7d 46 72 43 08 9f 74 69 5c d5 8f bf 57 92 0c c0
c0 5d 45 82 9c 0a 81 61 b9 43 f1 84 51 84 57 60
ed 09 65 40 e7 8a a9 75 0b 03 d0 24 48 cb f8 de
z || M' = 23 f5 0a ba ac 7b 64 64 7e b1 5c 95 7b 07 f5 ed
7d 46 72 43 08 9f 74 69 5c d5 8f bf 57 92 0c c0
c0 5d 45 82 9c 0a 81 61 b9 43 f1 84 51 84 57 60
ed 09 65 40 e7 8a a9 75 0b 03 d0 24 48 cb f8 de
54 68 69 73 20 69 73 20 61 20 74 65 73 74 20 6d
65 73 73 61 67 65 20 66 6f 72 20 4b 43 44 53 41
20 75 73 61 67 65 21
H' = af 3f b0 4b 07 03 c6 ea 56 08
d8 9b 38 c3 3b 35 9c bc a2 b0
③ 중간 값 e' = (r' H') mod q:
r' H' = 20a6dad3 eaa6ba22 8e827e64 e76d991a a56b583a
e' = (r' H') mod q
= 20a6dad3 eaa6ba22 8e827e64 e76d991a a56b583a
④ 증거 값 w' = ys'ge' mod p :
w' = 0d2ace49 f0415880
843e4cff 2a224dcc a4d12a79 11323aac e1eaf5b4 f479a91f
94d01820 193d40a5 f71347e3 8f97ef41 8bd25959 879ea7f6
2d3fbaa7 e70a9d78 b8dc7933 00bbf669 0829961a ab4e59a8
410510da ada05ef8 7e48144d 6efe5075 29011382 38c84b5d
2c3f590c 06e1b918 7ee5d509 e15ccab2 c257d549 ac1a5086
⑤ h(w') = r' :
h(w') = 8f 99 6a 98 ed a5 7c c8 d8 8a
a6 ff df ae a2 2f 39 d7 fa 8a
= r'
또한, 본 발명에 따른 실시예는 상술한 것으로 한정되지 않고, 본 발명과 관련하여 통상의 지식을 가진자에게 자명한 범위내에서 여러 가지의 대안, 수정 및 변경하여 실시할 수 있다.
이상과 같이, 본 발명에 의하면 대학, 동사무소 등과 같이 제 증명서를 발급하는 기관에 전자 서명된 문서의 안전한 출력화 및 검증 방안을 제공함으로써, 정보화 사회에서의 사용자의 편의성을 크게 높일 수 있다.
또한, 단순한 신원확인 용도에서 당사자 간 전자문서의 직접적인 양방향 처리를 구현함으로써, 전자 서명의 활성화에 기여할 수 있다.
도 1은 본 발명의 일 실시예에 따른 전자 문서 검증 시스템의 구성 블럭도.
도 2는 본 발명의 일 실시예에 따른 전자 서명된 문서의 검증 개념도.
도 3은 도 1에 있어, 전자 서명된 문서의 검증 구조도.
도 4는 본 발명의 일 실시예에 따른 전자 서명된 문서의 검증을 위한 제어 흐름도.
도 5는 도 4에 있어, 매개 변수 설정을 위한 제어 흐름도.
도 6은 도 4에 있어, 서명 생성을 위한 제어 흐름도.
도 7은 도 4에 있어, 출력된 전자 문서의 서명 검증을 위한 제어 흐름도.
* 도면의 주요 부분에 대한 부호의 설명 *
10 : 서명자 단말 20 : 인증 서버
30 : 증명자 단말 40 : 검증자 단말

Claims (7)

  1. 서명자 단말에서 출력 가능한 전자 서명을 전자 문서에 삽입하여 전송하는 과정과;
    검증자 단말에서 상기 전자 문서를 디지털 방식으로 출력하여 출력된 전자 문서의 검증을 요청하는 과정과;
    증명자 단말에서 상기 출력된 전자 문서에 삽입되어 있는 전자 서명의 증명을 통해 해당 전자 문서를 검증하는 과정을 포함하여 이루어지는 것을 특징으로 하는 전자 서명된 문서의 검증 방법.
  2. 제 1항에 있어서,
    상기 전자 서명을 전자 문서에 삽입하여 전송하는 과정은, 상기 서명자 단말에서 인증 방법에 의해 서명되어진 데이터들인 전자 문서의 주요 필드를 선택하는 단계와;
    상기 주요 필드를 인코딩하여 데이터 매트릭스 코드를 생성하는 단계와;
    상기 주요 필드에 대한 서명 매트릭스 코드를 생성하는 단계와;
    상기 생성된 데이터 매트릭스 코드 및 서명 매트릭스 코드를 전자 문서에 삽입하여 전송하는 단계를 포함하여 이루어지는 것을 특징으로 하는 전자 서명된 문서의 검증 방법.
  3. 제 2항에 있어서,
    상기 서명 매트릭스 코드를 생성하는 단계는, 상기 출력 가능한 전자 서명 생성을 위한 매개 변수를 설정하는 단계와;
    상기 설정된 매개 변수를 이용해 주요 필드에 대한 전자 서명을 생성하는 단계와;
    상기 생성된 서명 값을 인코딩하는 단계를 포함하여 이루어지는 것을 특징으로 하는 전자 서명된 문서의 검증 방법.
  4. 제 3항에 있어서,
    상기 매개 변수를 설정하는 단계는, 비트 길이가 512+256i(i=0,...,6)이 되는 큰 소수 p와, 비트 길이가 128+32j(j=0,...4)이고 이되는 소수 q, 군(group) Zp *에서 g=a(p-1)/q mod p(aZp *)인 위수 q의 유일한 순환 부그룹의 생성자 g, 및 Zp *에서 비밀키인 x를 생성하는 단계와;
    상기 생성된 p, g, x를 이용하여 y=g-xmod p가 되는 공개키 y를 계산하고 해당 인증 기관으로부터 인증서를 발급받아 사용자 변수 z=h(CertData)의 해쉬 값을 계산하는 단계를 포함하여 이루어지는 것을 특징으로 하는 전자 서명된 문서의 검증 방법.
  5. 제 3항에 있어서,
    상기 전자 서명을 생성하는 단계는, 임의의 랜덤 변수 k(0<k<q)를 선택하는 단계와;
    상기 선택된 랜덤 변수 k를 이용하여 서명의 첫번째 값 r=h(gk mod p)를 계산하는 단계와;
    상기 계산된 r을 이용하여 서명의 두번째 값 s=x(k-rh(z,m)) mod q를 계산하는 단계와;
    상기 계산된 r, s와 인증서를 인증 서버로 전송하는 단계와;
    상기 인증 서버에서 임의의 정수인 비밀키 t(0<t<q)를 선택하는 단계와;
    상기 선택된 t를 이용하여 상기 전송된 s를 암호화한 s'=(s+t) mod q인 s'를 계산하는 단계와;
    상기 계산된 s'를 서명자 단말로 전송하는 단계와;
    상기 t를 이용하여 =y-t mod p가 되는 검증 허락값 를 계산한 다음 상기 r과 함께 저장하는 단계를 포함하여 이루어지는 것을 특징으로 하는 전자 서명된 문서의 검증 방법.
  6. 제 1항에 있어서,
    상기 전자 문서를 증명하는 과정은, 상기 증명자 단말에서 검증자 단말로부터 전송되는 출력된 전자 문서의 비트열 r(0<r<q)과 s'(0<s'<q)를 검사하는 단계와;
    상기 r을 인증 서버로 전송하여 검증 허락을 요청하는 단계와;
    상기 인증 서버로부터 검증 허락값 가 수신되는 경우 사용자 변수 z=h(CertData)를 계산하는 단계와;
    상기 계산된 z를 이용하여 중간값 u=rh(z,m) mod q를 계산하는 단계와;
    상기 s'를 이용하여 증거값 w=ys' mod p를 계산하는 단계와;
    상기 계산된 w와 u를 이용하여 v=h(wgu mod p)를 계산하는 단계와;
    상기 계산된 v와 상기 r을 비교하여 v=r인 경우 해당 서명을 받아들이는 단계를 포함하여 이루어지는 것을 특징으로 하는 전자 서명된 문서의 검증 방법.
  7. 제 5항 또는 제 6항에 있어서,
    서명자 단말과 인증 서버에서 검증자 단말의 수를 제한하기 위한 카운트 n의 정보를 송수신하는 단계와;
    상기 서명자 단말에서 카운트 정보를 서명 매트릭스 코드에 암호화 하여 전자 문서에 삽입하는 단계와;
    상기 인증 서버에서 증명자 단말로부터 검증 허락 요청이 수신되는 경우 상기 카운트 n을 감소시킨 후 n=0인지 여부를 확인하는 단계와;
    상기 카운트 n이 0인 경우 검증 허락 요청을 거부하고 카운트 n이 0이 아닌 경우 내부에 저장하고 있는 검증 허락값 를 증명자 단말로 전송하는 단계를 더 포함하여 이루어지는 것을 특징으로 하는 전자 서명된 문서의 검증 방법.
KR10-2003-0001627A 2003-01-10 2003-01-10 전자 서명된 문서의 검증 방법 KR100525124B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR10-2003-0001627A KR100525124B1 (ko) 2003-01-10 2003-01-10 전자 서명된 문서의 검증 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR10-2003-0001627A KR100525124B1 (ko) 2003-01-10 2003-01-10 전자 서명된 문서의 검증 방법

Publications (2)

Publication Number Publication Date
KR20040064780A KR20040064780A (ko) 2004-07-21
KR100525124B1 true KR100525124B1 (ko) 2005-11-01

Family

ID=37355186

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2003-0001627A KR100525124B1 (ko) 2003-01-10 2003-01-10 전자 서명된 문서의 검증 방법

Country Status (1)

Country Link
KR (1) KR100525124B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100788429B1 (ko) * 2006-01-16 2007-12-24 주식회사 드림시큐리티 거래내역 검증방법
KR20080048159A (ko) * 2006-11-28 2008-06-02 주식회사 마크애니 전자문서 자동 위변조 검증 시스템
US7996677B2 (en) 2006-12-06 2011-08-09 Microsoft Corporation Digitally certified stationery
US20080301815A1 (en) * 2007-05-31 2008-12-04 Microsoft Corporation Detecting Unauthorized Changes to Printed Documents

Also Published As

Publication number Publication date
KR20040064780A (ko) 2004-07-21

Similar Documents

Publication Publication Date Title
CN108809658B (zh) 一种基于sm2的身份基的数字签名方法与***
US4881264A (en) Digital signature system and method based on a conventional encryption function
US20210367753A1 (en) Trusted measurement and control network authentication method based on double cryptographic values and chaotic encryption
US9698993B2 (en) Hashing prefix-free values in a signature scheme
Mironov Hash functions: Theory, attacks, and applications
US7007164B1 (en) Method and array for authenticating a first instance and a second instance
CN112532394A (zh) 一种区块链抗签名可追踪的无证书盲签名生成方法
CN114095181B (zh) 一种基于国密算法的门限环签名方法及***
CN114448641A (zh) 一种隐私加密方法、电子设备、存储介质以及芯片
CA2819211A1 (en) Data encryption
CN116346328A (zh) 一种数字签名方法、***、设备及计算机可读存储介质
CN115208615A (zh) 一种数控***数据加密传输方法
CN112989436B (zh) 一种基于区块链平台的多重签名方法
CN110932863B (zh) 一种基于编码的广义签密方法
KR100525124B1 (ko) 전자 서명된 문서의 검증 방법
CN114760072B (zh) 签名及验签方法、装置及存储介质
Rajasekar et al. Introduction to classical cryptography
Prafullchandra et al. Diffie-Hellman proof-of-possession algorithms
Rogobete et al. Hashing and Message Authentication Code Implementation. An Embedded Approach.
CN115174101B (zh) 一种基于sm2算法的可否认环签名生成方法及***
CN115174053B (zh) 一种基于sm9算法的可否认环认证的签名生成方法及装置
Jain Digital signature algorithm
US20220294605A1 (en) Blockchain-based public parameter generation method against backdoor attacks
EP1921790A1 (en) Signature schemes using bilinear mappings
Prafullchandra et al. RFC2875: Diffie-Hellman Proof-of-Possession Algorithms

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121019

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20130830

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20141016

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20151002

Year of fee payment: 11

LAPS Lapse due to unpaid annual fee