KR20030019411A - 암호화된 메시지의 타당성 검사를 하는 방법 - Google Patents

암호화된 메시지의 타당성 검사를 하는 방법 Download PDF

Info

Publication number
KR20030019411A
KR20030019411A KR1020027016463A KR20027016463A KR20030019411A KR 20030019411 A KR20030019411 A KR 20030019411A KR 1020027016463 A KR1020027016463 A KR 1020027016463A KR 20027016463 A KR20027016463 A KR 20027016463A KR 20030019411 A KR20030019411 A KR 20030019411A
Authority
KR
South Korea
Prior art keywords
message
polynomial
hash
bits
encrypted
Prior art date
Application number
KR1020027016463A
Other languages
English (en)
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 타오 그룹 리미티드
Publication of KR20030019411A publication Critical patent/KR20030019411A/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
    • 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/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3093Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving Lattices or polynomial equations, e.g. NTRU scheme
    • 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/002Countermeasures against attacks on cryptographic mechanisms
    • 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/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • H04L9/0656Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
    • H04L9/0662Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • H04L2209/125Parallelization or pipelining, e.g. for accelerating processing of cryptographic operations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/20Manipulating the length of blocks of bits, e.g. padding or block truncation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/34Encoding or coding, e.g. Huffman coding or error correction

Abstract

암호화된 메시지를 타당성 검사하는 방법은
(a) 메시지를 메시지 다항식으로 나타내는 단계,
(b) 암호 다항식을 형성하기 위해 메시지 다항식을 암호화하는 단계,
(c) 하나 이상의 해시(hash) 출력을 만들기 위해, 메시지 다항식 및 암호 다항식을 나타내는 제 1 및 제 2 해시 함수 입력들을 해시하는 단계 및
(d) 암호 다항식에 의해 정의된 암호화된 메시지 및 상기 하나 이상의 해시 출력 모두를 수신자에게 송신하는 단계를 포함한다.
이 방법은 특히 개인키 암호 시스템에 적용가능하다.

Description

암호화된 메시지의 타당성 검사를 하는 방법{A Method of Validating an Encrypted Message}
다양한 태양에 있어서 본 발명은 NTRU PCT 특허 출원번호 WO 98/08323("NTRU 특허 출원")에서 소개된 암호화 및 복호화 알고리즘의 변형형태와 연계하여 바람직하게 사용될 수 있다. 그러나, 아래에 설명되거나 청구범위에서 정의된 발명의 어떠한 태양도 그 특정 의미로만 사용되도록 제한되지는 않는다는 것을 알아야 한다.
본 발명은 암호화된 메시지의 타당성 검사를 하는 방법에 관한 것으로, 특히 공개키 암호시스템에 관련이 있으나 여기에만 관련있는 것은 아니다.
도 1은 텀블러(Tumbler)에서의 키 생성 시스템을 나타낸다.
도 2는 암호화 시스템을 나타낸다.
도 3은 복호화 시스템을 나타낸다.
도 4는 에러 수정 알고리즘을 나타낸다.
도 5, 6 및 7은 랩핑(wrapping) 에러의 개념을 나타낸다.
도 8은 계수들이 있을 수 있는 에러들을 위해 검사되는 순서를 나타낸다.
도 9는 전형적인 종래 기술인 의사 랜덤 숫자 발생기(Pseudo Random Number Generator, PRNG)를 나타낸다.
도 10은 텀블러 내의 PRNG를 나타낸다.
도 11은 덧셈 모듈로 3에 대한 회로도를 나타낸다.
도 12는 뺄셈 모듈로 3에 대한 회로도를 나타낸다.
도 13은 곱셈 모듈로 3에 대한 회로도를 나타낸다.
다양한 태양에 있어서 본 발명은 아래에 기술한 바와 같이 방법을 수행하기 위한 컴퓨터 프로그램, 이러한 컴퓨터 프로그램을 나타내는 데이터스트림(data stream) 및 이러한 컴퓨터 프로그램을 담고 있는 물리적 캐리어(carrier)에까지 확장된다. 본 발명은 이런 방법을 수행하도록 구성되거나 배열되어진 장치 및 시스템에까지 더욱 확장된다.
본 발명의 한 태양에 따르면,
(a) a = f * e(mod q)이고 q는 정수인 시험 다항식(trial polynomial) a를계산하는 단계 및
(b) 시험 다항식 a를 기초로 하여 다항식 e가 정확히 복호화되었는지를 결정하는 단계를 포함하되,
다항식 e가 정확히 복호화되지 않았으면,
(i) 시험 다항식 a의 어떤 계수 또는 계수들이 복호화 실패를 유발했었던 것 같은지를 결정하는 단계,
(ii) 새로운 시험 다항식을 정의하기 위해 상기 계수 또는 계수들을 조정하는 단계 및
(iii) 새로운 시험 다항식을 이용하여 암호 다항식 e를 복호화하기 위해 시도하는 단계를 포함하는
개인 키 f를 이용하여 암호 다항식 e를 복호화하는 방법이 제공된다.
개별 에러를 확인하려고 시도하고 가능하다면 그것을 수정하려는 이러한 방법은 개별 에러를 추적하지 않고 단 한번에 시험 다항식 a의 전체를 수정하는 종래 기술의 방법보다 효율성 면에서 실질적으로 우월하다.
효율성을 더욱 증가시키기 위해서, 알고리즘은 연역적으로 시험 다항식의 어느 계수가 복호화 실패(발생하는 경우)를 유발하는 것 같은지를 연역적으로 결정하려고 바람직하게 시도한다. 바람직하게는, 계수들은 복호화 실패하는 원인이 되는 그들 각각의 기대치에 따라서 소트(sort)된다. 그 후, 이 계수들은 가장 큰 것부터 가장 작은 것으로 기대치 순서대로 취해지고, 하나씩 조정된다. 각 조정 후에, 암호 다항식을 복호화하려는 추가의 시도는 새로운(조정된) 다항식에 기초하여 행해진다. 만일 실패하면, 다음 계수가 시도된다. 이것을 암호 다항식을 복호화할 때까지 또는 복호화하려는 시도가 포기될 때까지 반복된다.
다른 구성에서는, 하나 또는 그 이상의 계수가 부정확할 수도 있다는 가능성을 고려하기 위해 다항식들의 더욱 복잡한 순서가 계산될 수 있다. 이런 방법에 의해, 다항식 내의 계수들은 단독 또는 그룹으로, 복호화 실패할 원인이 되는 그들 각각 기대치에 따라서 소트된다. 그 후, 가장 큰 기대치를 갖는 계수 또는 계수들의 그룹은 조정되어 새로운 시험 다항식을 만든다. 만일 실패하면, 다음 계수 또는 계수들의 그룹이 취해지고, 적절한 조정이 가해진다. 이 과정은 암호 다항식이 적절하게 복호화되거나 또는 복호화하려는 시도가 포기될 때까지 계속된다.
복호화의 실패 원인이 되는 계수 또는 계수들의 그룹의 연역적인 기대치는 각각의 계수 값에 따라 결정될 수 있다. 보다 구체적으로 말하자면, 기대치는 기 정의된 계수 값 또는 기 정의된 최대 및 최소 필요 값들에 대한 각각의 계수 값의 근접성에 따라 결정될 수 있다. 시험 다항식이 최소 양수 나머지 모듈로q로 축소되는 경우, 기 정의된 계수 값은q/2로 취해질 수 있다. 또한, 시험 다항식이 최소 절대 나머지 모듈로q로 축소된 경우, 기대치들은q/2 및/또는 -q/2+1에 대한 계수의 근접성에 기초될 수 있다. 또한, 기대치들은q/2-1 및 -q/2에 대한 근접성에 기초할 수 있다.
미리 결정된 값 또는 값들에 대한 계수 값의 근접성은 기대치 순서를 정하거나 또는 정하는 것을 돕는 에러-정정 색인표에 대한 진입점(entry point)으로서 사용될 수 있다. 바람직한 실시예에서, 다항식 a는 0에 대해 중심이 되고, 기대치는계수들의 절대 값에 기초한다.
계수는 그것에 정수 값을 더하거나 뺌으로써 조정될 수 있다. 적용할 수 있는 경우, 계수가 위 또는 아래로 이동될 수 있는 양은 원래 메시지를 복호화하는데 사용된 파라미터들에 따라서 미리 결정될 수 있다. 전형적으로, 필요한 이동의 정확한 양은 이동의 방향에 따라서 미리 계산될 수 있다.
본 발명의 다른 태양에 따르면,
(a) 메시지를 메시지 다항식으로 나타내는 단계,
(b) 암호 다항식을 형성하기 위해 메시지 다항식을 암호화하는 단계,
(c) 해시(hash) 출력을 만들기 위해, 메시지 다항식 및 암호 다항식을 나타내는 입력들을 함께 해시하는 단계 및
(d) 암호 다항식에 의해 정의된 암호화된 메시지 및 해시 출력을 기초로 하는 체크 정보 모두를 수신자에게 송신하는 단계를 포함하는
암호화된 메시지를 타당성 검사하는 방법이 제공된다.
해시 함수 입력들은 바람직하게 접합된다.
바람직하게는, 해시 출력은 암호화된 메시지(예를 들어, 그것과 접합됨)와 연합되어 보통 텍스트로 수신자에게 보내진다; 또한 보내지기 전에 해시 출력은 어떤 방식으로 조작될 수 있다(즉, 이것 자체가 복호화될 수 있지만 안정성을 뚜렷하게 증가시키지는 못한다).
메시지가 수신될 때, 수신자는 수신된 암호 다항식 및 복호화된 메시지 다항식에 기초하여 재계산된 출력에 대해서 해시출력을 체크함으로써 송신된 암호화된메시지의 타당성을 확인할 수 있다. 만일 두 결과가 일치한다면, 복호화된 메시지는 정확한 것으로 받아들일 수 있다. 만일 일치하지 않는다면, 복호화된 메시지는 버려야 한다.
암호 다항식은 전송되기 전 및 해시 함수에 입력되기 전에 바이트를 채우도록 팩(pack)된 시리즈의 비트들에 의해 나타내어질 수 있다. 마찬가지로, 암호 다항식은 시리즈의 비트들(바람직하게는 계수 당 2비트)에 의해 나타내어질 수 있고, 이들은 해시되기 전에 유사하게 바이트들로 팩될 수 있다.
이 방법은 다항식에 기초한 암호 작성 시스템에 한정되지 않고, 보다 일반적으로
(a) 암호 텍스트를 형성하기 위해 메시지 텍스트를 암호화하는 단계,
(b) 해시 출력을 만들기 위해 메시지 텍스트와 암호 텍스트를 나타내는 입력들을 함께 해시하는 단계,
(c) 암호 텍스트에 의해 정의된 암호화된 메시지 및 해시 출력을 기초로 하는 체크 정보 모두를 수신자에게 송신하는 단계를 포함하는
암호화된 메시지를 타당성 검사하는 방법에까지 확장된다.
메시지 텍스트(보통 텍스트 메시지) 와 암호 텍스트를 함께 해시하여 수신자에게 해시된 값을 송신함으로써, 공격자가 메시지 텍스트 또는 암호 텍스트를 흔적없이 변형하는 것은 사실상 불가능하게 되었다. 만일 둘 중 하나가 변형되면, 수신자에 의해 만들어진 대응 해시는 일치하지 않을 것이고, 그러면 바람직하게 이 시스템은 메시지를 거절한다. 이런 정보가 공격자에게 전달되는 것을 막기 위해서,바람직한 시스템은 송신자에게 수신된 암호 텍스트가 유효한지를 알려주지 않는다.
바람직한 실시예에서, 보통 텍스트 메시지는 바이트의 시퀀스의 2진수 표현이 될 수 있고, 각 바이트는 안전하게 전달될 필요가 있는 메시지 안의 문자 숫자식 또는 다른 문자로 표현된다.
본 발명의 또다른 태양에 따르면,
a) 보호 메시지(protected message)를 산출하기 위해, 암호키 k를 가지는 보호 암호로 암호화되어질 보통 텍스트(plaintext) 메시지에 가하는 단계,
(b) 보호 메시지 및 암호 키 k로부터 암호 입력 메시지를 만드는 단계 및
(c) 입력 메시지를 암호화하는 단계
를 포함하는 다중 송신 공격으로부터 암호 시스템을 보호하는 방법이 제공된다.
이 방법은 암호화되는 텍스트는 비록 동일한 메시지가 여러번 보내지더라도 매번 예상치 못할 방식으로 달라질 것이라는 것을 보증한다.
이 입력 메시지는 보호 메시지와 암호 키를 접합함으로써 바람직하게 만들어진다. 암호 키는 입력 메시지의 처음 부분이 되거나 입력 메시지의 마지막 부분이 될 수 있다. 또는, 암호 키는 다른 편리한 방법으로 보호 메시지와 조합되어 암호화 입력 메시지를 만들 수 있다. 수신된 메시지가 수신자에 의해 복호화되어질 때 단지 필요한 것은 수신자가 암호 키를 추출하여 보호 메시지에서 보통 텍스트 메시지를 복원시킬 수 있어야 한다는 것이다. 접합(Concatenation)은 보호 메시지와 함께 암호키를 보내고 수신자에 의해 쉽게 사용될 수 있는 가장 쉽고 가장 편한 방법이다.
바람직하게, 암호 키는 랜덤하게 또는 적어도 실질적으로 랜덤하게, 각 새로운 보통 텍스트 메시지를 위해 다시 만들어진다. 암호 키는 적절하게 시드(seed)된 의사 랜덤 숫자 발생기(random number generator)의해 발생될 수 있다. 또는 선택적으로, 예컨대 키스트로크(keystroke) 또는 마우스 움직임의 타이밍으로부터 유도될 수 있는 임의의 "진실 랜덤(truly random)" 엔트로피에 의해 발생될 수 있다.
보호 암호는 단순 스트림 암호가 될 수 있다. 한 편리한 방법에 있어서, 암호 키는 의사 랜덤 숫자의 출력 시퀀스를 발생시키는 의사 랜덤 숫자 발생기를 시드하는데 사용된다. 이 시퀀스 내의 숫자들은 보통 텍스트 메시지의 개별 엘리먼트에 되어 보호 메시지를 산출한다. 예를 들면, 이것은 의사 랜덤 숫자들을 보통 텍스트 메시지를 나타내는 숫자들에 더하거나 뺌으로써 이루어질 수 있다.
가장 바람직한 실시예에서, 보통 텍스트 메시지는 2진 시퀀스로 나타내어지고, 의사 랜덤 숫자 발생기는 시드(seed)로서 암호 키를 기초하여 비트들의 의사-랜덤 시퀀스를 만들도록 배열된다. 보통 텍스트 메시지의 비트들은 보호 메시지를 생산하기 위해서 의사-랜덤 비트들과 배타적 OR(XOR) 연산이 된다. 이런 방법으로, 일단 수신자가 수신된 메시지를 복호화하면, 수신자는 간단히 암호 키k를 추출하여 그것을 랜덤 숫자(난수) 발생기의 초기 상태를 설정하기 위해 사용한다. 그리고, 이런 랜덤 숫자 발생기는 보호 메시지를 만들기 위해 원래 사용된 것과 동일한 랜덤 비트들의 시퀀스를 발생시키는데 사용될 수 있다. 그리고, 이 보통 텍스트 메시지는 비트의 의사-랜덤 시퀀스를 수신된 보호 메시지와 XOR 연산을 함으로써 간단하게 복원될 수 있다.
바람직한 실시예에서, 보통 텍스트 메시지는 바이트의 시퀀스의 2진수 표현이 될 수 있고, 각 바이트는 안전하게 전달될 필요가 있는 메시지 안의 문자 숫자식 또는 다른 문자로 표현된다.
입력 메시지는 바람직하게는 공개키 암호, 예컨대 다항식에 기초한 암호을 사용하여 암호화된다. 그러나, 다른 암호, 예를 들면, 타원 곡선 기술(elliptic curve technology)에 기초한 암호도 사용될 수 있다.
본 발명의 또다른 태양에 따르면, 의사 숫자 발생기는
(a) 각기 엔트로피 입력을 수신하고 각각의 해시 출력을 발생시킬 수 있는 복수의 제 1 층(tier) 해시 수단 및
(b) 각각의 제 1 층 해시 출력들을 입력으로서 취하여 의사(pseudo) 랜덤 숫자를 출력으로서 발생시키는 제 2 층 해시 수단을 포함한다.
바람직하게, 제 1 층 해시 수단의 각각은 필요할 때 추가의 엔트로피 입력을 요구할 수 있다. 선택적으로, 추가 엔트로피 입력은 한 번에 일괄적으로 모든 제 1 층 해시 수단에 제공될 수 있다.
추가의 의사 랜덤 숫자가 필요할 때는, 바람직하게는 제 1 층 해시 수단 중의 하나는 재(再)-해시를 실행하여 새로운 해시 출력을 만든다. 그 다음, 상기 새로운 해시 출력은 또다른 의사 랜덤 숫자의 발생시키는 도중에 상기 새로운 해시 출력을 사용하는 제 2 층 해시 수단으로 전달된다. 바람직하게는, 제 2 층 해시 수단은 다른 제 1 층 해시 수단에 의해 이전에 공급된 해시 출력을 새로운 해시 출력과 혼합하여, 또다른 의사 랜덤 숫자를 만들기 위해 이것 모두를 함께 해시한다.
바람직하게, 재-해시를 실행하고 있는 상기 하나의 제 1 층 해시 수단은, 재-해시의 일부로서, 이것의 이전 해시 출력 및 연관된 카운터 수단으로부터 추가의 입력 모두를 포함한다. 이것은 매번 재-해시 출력이 다르다는 것을 보증한다.
바람직하게, 예컨대 사용가능한 다수의 제 1 층 해시 수단으로부터 교대로 제 1 층 해시 수단을 선택함으로써 상기 제 1 층 해시 수단은 추가의 의사 랜덤 숫자가 발생되어야 할 때마다 변한다. 선택적으로, 제 1 층 해시 수단은 랜덤하게 선택될 수 있다.
카운터 수단은 제 1 층 해시 수단의 각각을 위해 제공될 수 있다. 또는 선택적으로, 단일 카운터 수단은 카운터 입력을 모든 제 1 층 해시 수단에 제공하기 위해 사용될 수 있다.
제 1 및 제 2 층 해시 수단은 소프트웨어 해시 함수, 바람직하게는 소프트웨어 해시 함수 객체로 구현될 수 있다. 선택적으로, 해시 수단은 하드웨어로 구현될 수 있다.
본 발명은 엔트로피를 제 1 층 해시 수단에 제공하기 위한 엔트로피 풀(pool)을 포함하는 의사 랜덤 숫자 발생기에까지 확장된다. 엔트로피 풀이 제공되면, 이것은 서브-풀로 분리되어질 수 있고, 각각의 서브-풀은 엔트로피를 각 제 1 층 해시 수단에 제공하도록 배열된다.
추가의 의사 랜덤 숫자들을 발생시킬 때, 제 2 층 해시 수단은 상기 하나의 제 1 층 해시 수단이외의 제 1 층 해시 수단으로부터의 이전의 해시 출력뿐만 아니라 새로운 해시 출력을 입력으로서 취할 수 있다. 종전의 해시 출력 및 새로운 해시 출력은 제 2 층 해시수단에 대한 입력으로 사용하기 위해서 접합될 수 있다.
보다 일반적으로, 본 발명은 다층(multi-tier) 시스템에까지 더욱 확장된다. 예를 들면, 3개 층의 시스템에서, 의사-랜덤 출력은 다수의 제 2 층 해시 수단에 의해 공급되는 제 3 층 해시 수단에 의해 생산된다. 이들의 각각은, 그 자체로, 다수의 제 1 층 해시 수단에 의해 공급된다. 제 1 층 해시 수단은 필요에 따라 엔트로피 입력이 제공된다. 물론 다른 유사한 다층 시스템도 가능하다.
본 발명은 의사 랜덤 숫자들을 발생시키는 대응 방법에까지 더욱 확장된다. 예를 들면, 본 발명은
(a) 엔트로피 입력을 복수의 제 1 층 해시 함수들에 공급하여 각각의 복수의 해시 출력들을 발생시키는 단계 및
(b) 출력으로서 의사 랜덤 숫자를 발생시키는 제 2 층 해시 함수에 해시 출력을 입력으로서 공급하는 단계를 포함하는
의사 랜덤 숫자들을 발생시키는 방법에까지 확장된다.
본 발명의 또다른 태양에 따르면,
(a) 복수의 제 1 타입 메시지 엘리먼트들로부터 제 1 스트링을 구성하는 단계,
(b) 제 1 스트링을 복수의 제 2 타입 엘리먼트를 포함하는 제 2 스트링으로 변환시키기 위해 제 1 스트링에 변환 함수를 가하는 단계 및
(c) 결합하여 변환 함수의 출력 스페이스의 외부에 위치하는 복수의 제 2 타입 엘리먼트들로부터 메시지의 말단 엘리먼트의 위치를 확인하기 위한 메시지 마커(marker)의 말단을 선택하는 단계를 포함하되,
(a) 단계에서 상기 메시지 엘리먼트들 중의 하나는 메시지의 말단 엘리먼트를 정의하고, 0개 이상의 제 1 타입 비 메시지(non-message) 엘리먼트들의 앞에 위치하며,
(b) 단계에서 변환함수는 모든 가능한 제 1 스트링을 모든 가능한 제 2 타입 엘리먼트 조합들에 의해 정의되는 스페이스보다 작은 출력 스페이스로 맵핑하도록 구성되는 디지털 메시지의 말단(the end of a digital message)을 확인하는 방법이 제공된다.
제 1 및/또는 제 2 스트링은 엘리먼트 기초 예를 들어 데이터스트림에 의해 엘리먼트에 처리될 수 있으나 꼭 필요한 것은 아니다. 모든 취지 및 목적에 대해, 스트링은 양 방향성이므로, 물론 "앞에 위치한다" 표현은 제 1 스트링이 데이터스트림으로 송신될 때 비 메시지 엘리먼트는 한 순간이라도 반드시 메시지 엘리먼트 뒤에 와야 한다는 것을 반드시 의미하지는 않는다; 이들은 쉽게 일시적으로 메시지 엘리먼트를 앞설 수 있다.
변환 함수는 모든 가능한 제 1 스트링을 모든 가능한 제 2 타입 엘리먼트 조합에 의해 정의되는 스페이스 보다 더 작은 출력 스페이스에 맵핑(mapping)하도록 배열되어, 변환 함수가 접근할 수 없는 "사용할 수 없는" 스페이스를 정의한다. 메시지 마커의 말단은 조합해서, "접근할 수 없는" 스페이스 내에 있는 다수의 제 2 타입 엘리먼트로부터 선택된다.
바람직하게, 제 1 스트링은 2진수 엘리먼트들의 시퀀스를 포함하고, 제 2 스트링은 3진수 엘리먼트들의 시퀀스를 포함한다. 가장 바람직한 실시예에서, 변환 함수는 19개의 2진수 엘리먼트를 12개의 3진수 엘리먼트로 변환하도록 배열된다. 만일 메시지가 19개의 2진수 엘리먼트보다 길면(주로 그렇게 될 것임), 이것은 처음에 19개의 엘리먼트 블록들로 분리되고, 각 블록은 다른 것들과 분리되어 취급된다. 만일 마지막 블록이 메시지에 의해 채워지지 않으면, 마지막 블록은 비-메시지 엘리먼트로 패딩(padding)될 수 있다.
메시지 마커의 말단은 바람직하게 제 2 스트링의 길이와 동일한 길이가 될 수 있다. 특히, 바람직한 실시예에서, 메시지 마커의 말단은 12개의 3진수 엘리먼트를 포함한다.
본 발명의 보다 일반적인 태양에 있어서, 변환 함수는 한 베이스(base)의 엘리먼트들을 다른 베이스의 엘리먼트들로 변환시킬 수 있다. 바람직하게는, 함수에 대한 입력은 함수(예를 들어, 3진수)로부터의 출력보다 낮은 베이스(예를 들어 2진수)를 갖으나, 이것은 높은 베이스를 가질 수 있다.
일단 제 2 스트링이 만들어지면, 제 2 스트링은 예컨대 메시지 마커의 말단과 접합됨으로써 결합되어 제 3 스트링을 형성할 수 있다. 이 방법이 암호화와 관련되어 사용되면, 제 3 스트링은 암호화되고 수신자에게 보내진다.
변환 함수의 출력 스페이스 외부에 있는 스페이스는 다수의 부분으로 나눠질 수 있고, 각 부분은 제 1 스트링 내의 위치를 나타내게 되어, 메시지의 말단 엘리먼트의 위치는 대응하는 부분 내에 위치하는 메시지 마커의 말단을 선택함으로써확인될 수 있게 된다. 바람직한 실시예에서, 상기 스페이스는 19 부분으로 나눠지고, 각각은 2진의 제 1 스트링 내의 위치들 중의 하나를 나타내게 된다.
이런 배열에서, 메시지 마커의 말단은 상기 부분 내에 있는 가능한 마커들의 그룹으로부터 실질적으로 랜덤하게 선택될 수 있다.
제 1 스트링 내에서, 바람직하게는 메시지의 말단 엘리먼트는, 만일 있다면, 비 메시지 엘리먼트들의 바로 옆에 놓일 수 있다. 그러나, 이것은 필수적인 것은 아니고, 비 메시지 엘리먼트는 항상 비 메시지 엘리먼트들로부터 일정한 수의 엘리먼트들만큼 분리될 수 있다는 것이 추측될 수 있다. 어떤 응용에 있어서, 일정한 수의 엘리먼트들은 매번 전달되어질 필요가 있는 헤더 또는 다른 정보를 포함할 수 있다. 필요한 모든 것은 메시지의 말단 엘리먼트의 위치는 메시지 마커의 말단으로부터 유일하게 결정될 수 있는 것이다.
본 발명은 이런 방법을 실행하기 위한 컴퓨터 프로그램, 이런 컴퓨터 프로그램을 운반하는 물리적 캐리어 및 이런 캐리어를 나타내는 데이터스트림에까지 확장된다.
본 발명은 상기에서 설명된 방법을 사용하는 메시지의 말단의 확인하는 단계를 포함하는 디지털 메시지를 암호화하는 방법에까지 확장된다. 바람직하게는, 암호화는 암호화된 정보를 수신자에게 전달하기 전에 제 3 스트링을 암호화하는 단계를 포함한다.
본 발명의 다른 태양을 따르면,
(a) 복수의 제 2 타입 엘리먼트들을 포함하는 제 3 스트링에 역 변환 함수를가하는 단계 및
(b) 메시지 마커의 말단을 나타내는 출력부분을 제외하는 함수의 출력을 제 1 스트링으로서 취하고, 메시지 마커의 말단에 따라서 메시지의 말단 엘리먼트의 제 1 스트링 내의 위치를 결정하는 단계를 포함하되,
(a)단계에서, 역 변환 함수는 복수의 제 2 타입 엘리먼트들을 입력으로 취하여 그것들을 복수의 제 1 타입 엘리먼트들로 변환하고, 함수의 출력이 주어진 값보다 더 중요한 제 1 타입 엘리먼트를 가질 때 함수의 입력으로 취해진 복수의 엘리먼트들은 함께 메시지 마커의 말단을 구성하는 것을 결정하는
디지털 메시지의 말단을 결정하는 방법이 제공된다.
본질적으로, 이것은 메시지의 말단을 확인하기 위한 상기의 방법의 역을 나타낸다. 이 방법은 수신된 정보로부터 메시지 마커의 말단을 추출해낼 필요가 있는 수신자에 의해 사용될 것이고, 그것으로부터 메시지의 마지막 엘리먼트의 위치를 결정하게 될 것이다. 그 정보에 의해, 메시지의 모든 범위가 결정될 수 있고 전달된 메시지가 추출될 수 있다.
바람직하게는, 역 변환 함수는 12개의 3진수 엘리먼트를 입력으로서 취하여 19개의 2진수 엘리먼트를 출력으로서 생산한다. 그러나, 본 발명의 보다 일반적인 형태에서, 이 함수는 한 베이스에서 다른 베이스로 간단히 변환할 수 있다.
바람직하게는, 메시지의 말단의 엘리먼트의 위치는 함수의 출력에 입력으로 메시지 마커의 말단이 제공될 때 함수의 출력이 주어진 값을 초과하는 만큼의 양에 따라서 결정된다.
본 발명은 이런 방법을 실행하기 위한 컴퓨터 프로그램, 이런 컴퓨터 프로그램을 운반하는 물리적 캐리어 및 이런 컴퓨터 프로그램을 나타내는 데이터스트림에까지 확장된다.
본 발명의 다른 태양에 따르면,
(a) 제 3 스트링을 산출하기 위해 암호화된 스트링을 복호화하는 단계,
(b) 복수의 제 2 타입 엘리먼트들을 포함하는 제 3 스트링에 역 변환 함수를 가하는 단계,
(c) 메시지 마커의 말단을 나타내는 출력부분을 제외하는 함수의 출력을 제 1 스트링으로서 취하고, 메시지 마커의 말단에 따라서 메시지의 말단 엘리먼트의 제 1 스트링 내의 위치를 결정하는 단계 및
(d) 제 1 스트링으로부터 메시지를 복원하는 단계를 포함하되,
(b)단계에서, 역 변환 함수는 복수의 제 2 타입 엘리먼트들을 입력으로 취하여 그것들을 복수의 제 1 타입 엘리먼트들로 변환하고, 함수의 출력이 주어진 값보다 더 중요한 제 1 타입 엘리먼트를 가질 때 함수의 입력으로 취해진 복수의 엘리먼트들은 함께 메시지 마커의 말단을 구성하는 것을 결정하는
암호화된 스트링으로부터 디지털 메시지를 복호화하는 방법이 제공된다.
본 발명은 위에서 언급된 방법들 중에서의 임의의 하나 또는 조합을 구현하는 암호 시스템에까지 더욱 확장된다.
본 발명의 다른 태양에 따르면,
(a) 연산되어질 시리즈의 수치들(x)을 각각의 비트방식의 벡터들로 나타내는단계,
(b) 상기 벡터들 각각 중에서 하나의 비트로 제 1 워드(X~0)를, 그리고 상기 벡터들 각각 중에서 다른 하나의 비트로 제 2 워드(X1)를 형성하는 단계 및
(c) 워드들 중 하나 또는 모두에 대해 비트 방식의 논리 연산을 실행하는 단계를 포함하는 비트방식의 논리 연산을 수행하도록 구성되는 장치 상에서 병렬 모듈로 산술 계산(parallel modulo arithmetic calculation)을 수행하는 방법이 제공된다.
바람직하게는, 위에서 설명된 방법은
(d) 연산되어질 시리즈의 또다른 수치들(y)을 각각의 비트방식의 벡터들로 나타내는 단계,
(e) 상기 벡터들 각각 중에서 상기 하나의 비트로 다른 제 1 워드(Y~0)를, 그리고 상기 벡터들 각각 중에서 상기 다른 하나의 비트로 다른 제 2 워드(Y1)를 형성하는 단계 및
(f) 각각의 제 1 워드 양쪽 모두(X~0, Y~0) 또는 각각의 제 2 워드 양쪽 모두 (X1, Y1) 에 대해 비트 방식의 연산을 실행하는 단계를 포함한다.
바람직하게는, 제 1 워드 또는 각 제 1 워드들은 한 위치에 함께 저장되고, 제 2 워드 및 각 제 2 워드들은 다른 스페이스적으로 분리된 별도의 위치에 함께 저장된다. 제 1 저장 수단 및 제 2 저장 수단은 이것을 이루도록 제공될 수 있다.
한 실시예에서, 연산될 수치들 및/또는 또다른 수치들은 모듈로 3이고, 예를 들어, 터트(tert)들로 표현될 수 있다.
계산은 소프트웨어로 실행될 수 있거나 선택적으로 하드웨어 즉, XOR, AND, OR 및 NOT 게이트(gate)들로 구현될 수 있다.
본 발명은 상기 방법을 사용하는 암호화 및/또는 복호화 방법에까지 확장된다.
암호화의 바람직한 방법은 청구항 1 또는 청구항 2에서 청구된 방법을 사용하여, 모듈로 N(N ≥3) 내에 잇는 계수들을 가지는 다항식들을 더하거나 빼거나 곱함으로써 키를 발생시키는 단계를 포함하는데, 제 1 다항식의 계수들은 시리즈의 수치들(x)를 포함하고, 제 2 다항식의 계수들은 시리즈의 또다른 수치들(y)를 포함한다.
복호화의 바람직한 방법은 청구항 1 또는 청구항 2에서 청구된 방법을 사용하여, 모듈로 N(N ≥3) 내에 잇는 계수들을 가지는 다항식들을 더하거나 빼거나 곱하는 단계를 포함하는데, 제 1 다항식의 계수들은 시리즈의 수치들(x)를 포함하고, 제 2 다항식의 계수들은 시리즈의 또다른 수치들(y)를 포함한다.
본 발명은 상기 방법을 실행하기 위한 컴퓨터 프로그램, 이런 컴퓨터 프로그램을 담고 있는 물리적 캐리어 및 이런 컴퓨터 프로그램을 나타내는 데이터스트림에까지 더욱 확장된다.
본 발명의 다른 태양에 따르면,
a) 연산되어질 시리즈의 수치들(x)을 각각의 비트방식의 벡터들로 나타내기위한 수단,
(b) 상기 벡터들 각각 중에서 하나의 비트로 제 1 워드(X~0)를, 그리고 상기 벡터들의 각각 중에서 다른 하나의 비트로 제 2 워드(X1)를 형성하기 위한 수단 및
(c) 워드들 중 하나 또는 모두에 대해 비트 방식의 논리 연산을 실행하기 위한 수단을 포함하는 비트방식의 논리 연산에 의해서 병렬 모듈로 산술 계산(parallel modulo arithmetic calculation)을 수행하기 위한 디지털 장치가 제공된다.
본 발명은 많은 방법을 통하여 실용화될 수 있다, 그리고, 하나의 특정하고 바람직한 실시예가, 예를 통해, 첨부된 도면을 참조로 하여 기술될 것이다.
1. 도입
텀블러TM은 본 출원인의 암호 개발 장치(cryptographic developer' toolkit)의 상표명이다. 이것은 많은 다른 암호 알고리즘 및 비 알고리즘 특이 APIs를 포함하고 있고, 주로, NTRU 코퍼레이션에 의해 개발된 NTRU PKCS 알고리즘을 기반으로 형성되나 전적인 것은 아니다. 세부사항은Hoffstein, Pipher and Silverman, NTRU: A Ring-Based Public Key Cryptosystem,J P Buhler(ed),Lecture Notes in Computer Science 1423, Spring-Verlag, Berlin, 1998, 267-288,및 NTRU Cryptosystems, Inc의 이름으로 PCT 특허 출원번호 WO98/08323 에서 찾을 수 있다. 후자의 문서는 "NTRU 특허 출원(the NTRU patent application)"으로 계속해서 언급될 것이다.
이 알고리즘은 암호 작성법에서의 큰 발전을 의미한다. 이것은 "큰 정수(Big integer)" 기반 제품들의 전통적인 세계와는 다르게, 다항식 믹싱 방법에 기초한 보다 유효하고 안정한 시스템을 제공한다. 그러나, 베어 알로리즘(bare algorithm)은 암호작성 제품으로서 사용할 수 없다. 많은 기계류 사이에는 필수적이다. NTRU의 경우에, 그것의 우수성의 근원인 독특한 스타일은 많은 이 기계류가 알고리즘에 대응할 수 있도록 재발명되어야 한다는 것을 의미한다.
본 문서는 텀블러 내에 포함된 NTRU PKCS(Public Key Cryptosystem) 의 독특한 실행에 대해 기술한다. 또한 실제 암호 작성 기구로서 NTRU PKCS를 실행하려고 시도하는데서 겪는 문제점을 지적하고, 이런 문제를 해결하기 위해서 어떻게 텀블러가 개량 기술을 사용하는지를 설명한다.
텀블러에서 사용되는 많은 개량 기술들은 서로 무관하고 단독으로 또는 어떤 선택된 조합으로 사용될 수 있다는 것을 이해하여야 한다. 예를 들어, 비록 하기의 기술들이 바람직한 텀블러 실시예 내에 모두 포함될지라도, 이들은 단독으로 또는 어떤 조합으로 사용될 수 있다: 에러 수정, 메시지 마커의 말단, 체크 메커니즘, 큰 상태 의사 랜덤 숫자 발생기, 모듈로 산술의 사용, 다중 전달 공격으로부터의 보호. 비록 NTRU 특허 출원에서 기술된 바와 같이, 텀블러가 주로 NTRU PKCS 알고리즘 주위에 설치될지라도, 개량 기술의 대부분은 더 넓은 응용예를 갖는다.
1.1 최초 NTRU PKCS 특허 출원
NTRU 특허 출원은 공개키 및 개인키라고 불리는 두개의 관련된 다항식의 생성에 대한 방법을 기술한다. 또한, 다항식의 형태로 메시지를 암호화된 형태로 변형시키기 위해 공개키가 어떻게 사용될 수 있는지를 보여준다. 이 암호화된 메시지는 안전하다. 왜냐하면, 암호화된 메시지 및 공개키만이 알려졌을 때, 원래 메시지를 복원하는 작업은 너무 복잡해서 적당한 시간 안에 통상의 기술에 의해서는 실행될 수 없기 때문이다. 또한 암호화된 형태는 메시지를 안정하게 전달(또는 저장) 하는 방법을 제공할 수 있다. 왜냐하면, 보통 개인키를 알고 있으면 원래 메시지를 복원할 수 있기 때문이다.
1.2 불완전한 솔루션(solution)
개인키 및 암호화된 형태를 사용하여, 원래 메시지는 보통 복원될 수 있다. 메시지가 복원될 수 없을 때는 이것은 랩핑(wrapping) 또는 갭(gap) 실패라고 불리는 에러에 기인한다. 초기에는 랩핑 실패가 기존 방법에 의해 쉽게 복원되고 갭 실패는 드물게 발생해서 무시할 수 있다라고 여겨졌다(NTRU 특허 출원 §1.3, p. 31). 그러나, 랩핑 실패를 수정하기 위해서 제안된 방법이 에러를 수정하는데 자주 실패했다는 것과 갭 실패가 현저하게 사용성에 영향을 미칠 만큼 일반적이었다는 것이 분명해졌고 에러의 검색에 대한 문제도 있었다. 메시지를 복호화하려는 사람은 주로 원본을 가지고 있지 않기 때문에, 메시지가 정확하게 복호화되었는지 아닌지를 알기가 어려웠다.
컴퓨팅 용어에서, 임의 데이타 파일은 비트(binary digit)의 임의 길이 스트링이다. 최초 NTRU 특허 출원에서 기술한 바와 같이, 암호는 고정된 길이의 3진수 다항식을 암호화한다. 따라서, 데이타 파일을 고정된 길이 3진수 다항식의 시퀀스로 변환하여 다항식의 결과 시퀀스를 원래 데이터 파일로 되돌릴 수 있도록 하는 방법을 제공하는 것이 필요하다.
암호를 일반적으로 사용하는 동안에, 공격자로 알려진 많은 사람들이 끊임없이 암호를 깨뜨리려고 시도했다. NTRU PKCS이 사용된다면, 암호화된 메시지 및 공개키만이 알려졌을 때, 원래 메시지를 복원하는 작업은 너무 복잡해서 적당한 시간 안에 통상의 기술에 의해서는 실행될 수 없다. 공격자들에게는 암호화된 메시지 및 공개키 보다 많은 정보를 얻는 것이 해결책이다.
암호가 사용되는 방법에 따라, 공격자가 암호를 깨뜨리는데 유용한 추가의 정보를 얻는 것이 가능할 수도 있다. 빠른 해결책은 이러한 것을 허용하는 방식의 암호를 사용하지 않는 것이다. 그러나, 어떤 경우에는, 이것은 실용적인 목적에 너무 많은 제한을 가할 수 있다. 2가지 경우를 이하 설명하면, 동일한 메시지를 여러번 정확하게 보내는 것이 바람직한 경우 또는 잠재적인 공격자에 의해 접근될 수도 있는 자동화된 시스템을 만들기를 원하는 경우가 그러할 수 있다.
NTRU 특허 출원은 암호를 위한 이론적인 알고리즘을 기술하나, 어떻게 실제로 기계가 이 알고리즘을 실행하는지를 설명하지는 않는다. 이 이론적 알고리즘은 상대적으로 적은 단계를 포함하고 현대 컴퓨터가 빠르게 실행할 수 있는 수학을 사용하기 때문에 자연적으로 빠르다. 그러나 본 출원인은 이 알고리즘의 속도를 상당히 향상시키는 기술을 발명하였다.
1.3 텀블러 솔류션(The Tumbler Solution)
NTRU PKCS의 텀블러 구현은 이론과 실제 사이의 차이를 연결한다. NTRU에 포함된 진보를 기초로 한 많은 새로운 기술을 포함하고 암호문, 데이타 신호 처리 및 컴퓨팅의 다른 영역에서 사용될 수 있다.
이하, 에러를 탐지하고 랩핑 또는 갭 실패 모두를 수정하는 방법이 자세히서술된다. 암호가 데이터를 보호하는 실용적인 수단으로 사용되기 위해서는 복호화된 메시지에 결함이 없음이 신뢰될 수 있어야 한다. NTRU 특허 출원에서 기술된 최초의 방법을 아래에서 설명된 탐지 및 수정 시스템과 함께 사용하면 그러한 경우가 될 수 있을 것으로 여겨진다.
일관된 '비트 투 터트(bit to tert)' 변환 체계는 표준 컴퓨터 데이터 파일과 NTRU PKCS 다항식 사이를 인터페이스하기 위해 원래의 '메시지 마커의 말단' 시스템과 연계하여 작동한다.
텀블러는 NTRU PKCS를 따라 연산하고 사용자가 암호보안을 파괴하지 않으면서 동일한 메시지를 여러 번 정확하게 보내거나 잠재적인 공격자에 의해 접근될 수 있는 자동화된 시스템을 사용할 수 있게 하는 프로세스들을 포함한다.
NTRU PKCS를 프로세싱하기 위한 최적의 솔루션을 찾기 위해서 전 범위의 표준 수학 도구들 분석하는 것뿐만 아니라, 텀블러의 NTRU PKCS 구현의 개발자는 굉장히 증가된 속도에서 많은 NTRU PKCS 데이터를 처리하는 반직관적(anti-intuitive)으로 보이는 최초 방법을 만들어내었다.
NTRU PKCS를 사용하는 상업용 암호문을 사용하기 위해서, 이 내부 알고리즘을 일반적인 공격에 대한 암호 사용을 보호하도록 설계된 매우 많은 메커니즘과 결합하는 것, 암호를 일반적인 데이타 처리와 인터페이스하는 것 및 암호 내의 고유의 문제를 극복하는 것이 필수적이다. 본 출원인은 이런 모든 것이 텀블러에서 성취되었다고 믿는다.
2. 수학적 술어
NTRU 암호 시스템 및 텀블러 버전은 3개 정수 파라미터(N,p,q) 및 정수 계수를 가지고 N-1보다 크지 않은 차수의 다항식의 4개 세트(L f ,L g ,L φ ,L m )에 의존한다.pq가 소수가 될 필요는 없다. 그러나, 최대 공약수(GCD)(p,q)=1이고q는 항상p보다 상당히 크다는 것을 가정한다. 텀블러 구현에서p는 보통 3이고,q는 보통 64, 128 또는 256인데, N의 크기에 따라서 좌우된다. 다른 구현에서는 다른 값이 사용될 수 있다.
하나는 끝수를 버린(truncated) 정수 다항식 R=Z[X]/(XN-1)의 링(ring) 내에서 작용한다. 엘리먼트 F∈R은 다항식 또는 벡터로 표현될 것이다.
R에서의 덧셈 및 뺄셈은 정상적인 다항식 산술에서와 정확히 동일한 방법으로 작용한다. 그러나, 곱셈 연산은 약분(reduction) 모듈로(XN-1) 을 필요로 한다.
* 표시는 R에서의 곱셈 연산을 나타낸다. 이 별표 곱셈은 원형 컨벌루션(convolution) 프로덕트로서 명확하게 주어진다.
F * G = H
이것은 계수가 '랩 어라운드(wrap around)'한다는 것을 제외하고는 일반적인다항식 곱셈 연산과 정확하게 동일한데, 그 결과X N 의 계수는 상수 계수와 결합(덧셈)되고,X N+1 의 계수가 X의 계수와 결합되는 식으로 계속 결합된다.
실제로, 주로 다항식의 계수 모듈로p또는q의 값에 관심을 갖게 된다. 사실상, 많은 연산이 링 Zp[X]/(XN-1) 또는 Zp[X]/(XN-1)에서 발생할 것으로 여겨질 수 있으나, 모듈로pq가 축소된 단일 다항식의 나머지를 고려하는 것이 바람직하다.
곱셈 연산 모듈로q를 실행할 때는, 계수 모듈로q를 축소하는 것을 의도한다.
모듈로 정수p를 축소할 때 기억해야 할 2개의 유용한 규칙이 있다:
·a(modp)+ b(modp)=(a+b)(modp),
·(c(modp) ×a (modp))(modp)=(c ×a)(modp).
R은 필드가 아니다. 그러나, NTRU 파라미터는 적절하게 선택된 다항식이 R안에 역함수를 갖는 방식으로 선택되어져오고 있다. R은 독특한 인수분해 변역(domain)이라서, 만일 존재한다면, 이 역함수는 독특하다.
Lm은 계수 모듈로p를 갖는 R 내의 모든 다항식으로 구성된다.L f ,L g L φ 의 엘리먼트들 계수 모듈로 p를 가지나, 기 정의된 가중치를 가진다.L g L φ 안의 다항식은 각각 정확히, dg(N) 및 dφ(N)계수들은 1 값을 가지게 하고, dg(N) 및dφ(N)계수들은 -1 값을 가지도록 하고 나머지 계수들은 모두 0 값을 가지도록 정의된다.L f 안의 다항식들은d f (N)계수들이 1 값을 가지도록 하고d f (N)-1 계수들은 -1 값을 가지도록 정의된다. 계수들의 나머지 모두는 0 값을 갖는다.L f 안의 다항식은 1 값을 갖는 하나의 적은 계수를 갖고, 역전된다.
3. 개관
텀블러 암호 시스템은 키 생성 시스템, 암호화 시스템 및 복호화 시스템의 3개의 분리된 시스템으로 형성된다. 여기서는 이 3개 시스템의 각각을 간단히 조사하고 어떻게 각각이 많은 주요 공정으로부터 구성되는지를 약술한다.
NTRU 특허 출원은 매우 간단한 2 단계 또는 3 단계 공정으로 엔코딩 및 디코딩을 기술한다. 텀블러 구현은 많은 다른 모습을 도입해와서, 이 공정을 상당하게 더 복잡하게 만든다. 하기의 3개의 공정은 각각 흐름도와 함께 기술된다. 이 3개 흐름도를 NTRU 특허 출원으로부터의 이것의 등가물과 비교하는 것은 흥미있는 것이다(도 3,4 및 5).
키 생성 시스템의 경우에, 이 공정은 상대적으로 단순하다. 그러나, 키 생성에 있어, 효율면에 상당한 진보가 이루어졌다.
3.1 키 생성
여기서는, 도 1(NTRU 특허 출원의 도 3과 비교)에서 나타나는 바와 같이, 키 생성 시스템이 기술된다.
101. 이 키 생성 시스템은 알고리즘 파라미터들Nq를 받아들인다. NTRU특허 출원에서 사용된 파라미터q는 3으로 고정된다. 그러나, 다른 값이 사용될 수 있다.
102. 개인키 다항식,f,는 NTRU 특허 출원(§1.2,p.31)에서 기술된 바와 같이,N에 의존하는L f 세트로부터 랜덤하게 선택된다.
103.f의 역수는 모듈로 3으로 계산된다. '유클리드 알고리즘'을 사용하는 대신에, 더욱 효율적인 '올모스트 인버스 알고리즘'(Almost Inverse Algorithm)이 사용된다. 이 알고리즘은 리차드 스코펠 등의 'Fast Key Exchange with Elliptic Curve Systems'(Advandces in Cryptology-CRTPTO 95, Lecture Notes in Computer Science 973, ed.D. Coppersmith, Springer-Verlag, New York, 1995, pp. 43-56)논문에서 발견되었다. 역이 존재하지 않는 것이 가능하다. 이런 경우에, 102로 돌아가서 새로운f를 선택한다. 이 알고리즘을 구현하는데 있어서, 벡터 표현에 대한 평행 비트 연산을 통한 고속 모듈로 산술의 프로세스가 사용된다(보다 상세한 것은 §12를 참조).
104. 103에 관해서는,f의 역이 모듈로 2에 의해 계산되는 것만 제외한다. 이 알고리즘을 구현하는데 있어서, 벡터 표현에 대한 병렬 비트 연산를 통한 고속 모듈로 산술 프로세스가 사용된다(§12 참조).
105. 역 모듈로 소수가 주어지면, 구어적으로 부트스트랩핑(bootstrapping )으로 불리는 잘 공지된 수학 기술을 사용하여 그것으로부터 역 모듈로 소수의 거듭제곱을 계산하는 것이 가능하다. 이것은 역 모듈로 2로부터 역 모듈로q(항상 2의제곱)를 계산할 수 있도록 한다. 부트스트랩핑은 다음의 원칙을 사용한다. 만일 F가f모듈로 소수의 거듭제곱(p m)의 역이라면, 2F-f*F2f모듈로p 2m 의 역이 될 것이다.
106.gf와 유사한 방법으로, 그러나L g 세트로부터 선택된다.
107. 이것은 인수p(=3)가 각 사용의 용이성을 위해 포함되었던 것을 제외하고는 NTRU 특허 출원(도 3, 단계 350)에서 실행된 것과 동일한 계산법이다.
108. 개인키는 쌍f, F3이다.
109. 공개키h가 공개될 수 있고 단계 107에서 계산되어진다.
3.2 암호화
여기서는, 도 2에 나타난 바와 같이, 텀블러 암호화 시스템이 기술된다. 이것은 NTRU 특허 출원(도.4)에서 기술된 최초 암호화 시스템과 비교되고 대조되어야 한다.
도 2에서, ∥표시는 각 측면에 대한 객체의 접속을 의미하기 위해 사용된다.
201. 암호화 시스템은 정의되지 않은 길이를 갖는 바이트의 스트링(2진수)인 원래 메시지 데이터(보통 텍스트), P; 공개키 다항식,h, 알고리즘 파라미터Nq; 및, 필요하다면, 다중 송신 공격 보호키(Multiple Transmission Attack Protection Key)(MTA key) 길이,k를 취한다. 이 프로세스는 SHA-1 해시 함수, H()를 사용한다. SHA-1은 미국 정부의 국제표준협회 및 기술보안 해시 표준(National Institute of Standards and Technology's Secure Hash Standard)(FIPS 180-1)에서정의된다.
물론, 보통 텍스트 P는 어떤 편리한 기준 2진수 표현에 따라서 암호화될 실제 문자 숫자식의(또는 다른) 메시지를 나타낸다는 것을 이해할게 될 것이다.
202. 만일 암호가 MTA 보호가 필요하다면, 이것은 인코딩 전에 보통 텍스트에 가해진다(§7 참조). 0이 아닌k에 대해,랜덤 데이터 (K)의K바이트가 발생되어지고, 이런 바이트는 시퀀스 발생기(§11 참조)를 시드하기 위해 사용된다. 만일 MTA 보호가 사용되지 않는다면, k=0; K=ø이다. 그러나, 시퀀스 S(K)가 논리적으로 모두 0으로 여겨진다. 실제로, 모든 0 의 시퀀스는 아무 영향이 없다. 이것은 S( ø)!과 동일한 것이 아니다.
203. MTA 키, K,는 암호문 안으로 진입하기 위한 보통 텍스트의 처음 k 바이트를 형성한다(§7 참조). 그 다음, 이것은 시퀀스 발생기의 출력과 배타적 OR(XOR) 연산된 보통 텍스트 데이터의 원래 바이트의 앞에 위치한다.(§11 참조). XOR 연산된 보통 텍스트를 암호화하기 위해서, 2진 데이터를 3진수로 변환하여 암호에 의해 사용되는 3진수 다항식들(m)을 채우는 것이 필요하다(§8 참조). 이런 3진수 또는 "터트(tert)" 는 PKCS 암호에 의해 프로세싱되는 메시지 다항식들을 형성한다. 만일 N 터트들보다 적은 것이 처리되지 않고 남아 있다면, 나머지 터트들은 다음 메시지 다항식으로 교체되고 메시지 마커의 말단은 207에서 생성될 것이다.
204. 충분한 터트가 처리되지 않고 남아 있다면, 메시지 다항식은 다음N으로부터 구성되고 암호화된다. 만일 보통 텍스트 데이타가 소모되어지고 다음 메시지 다항식을 채울 불충분한 터트가 있다면, 메시지 마커의 말단은 207에서 생성될 것이다.
205. 랜덤 다항식은 공개키에 의해 선택되고 곱해진다. 프로덕트 다항식은 메시지 다항식에 더해진다. 이 프로세스는 파라미터 P가 공개키에 포함된다는 것을 제외하고 NTRU 특허 출원(도 4, 단계 450)에서 기술된 것과 동일하다. 얻어진 암호 다항식은 바이트들을 채우기 위해 팩(pack)되고 검사 해시 함수로 입력되고, 계수 당 2비트를 사용하는 메시지 다항식의 앞에 위치하는데, 메시지 다항식 또한 바이트를 채우기 위해서 팩된다. 검사(check) 해시는 계산되고 암호 다항식(§6 참조)의 말단에 접합된다. 이 해시로부터의 출력은 검사 블록 B i 를 형성한다.
206. 암호화된 메시지 다항식을 갖는다면, 보통 텍스트의 다음N터트들을 사용하는 다음 다항식으로 진행한다.
207. 보통 텍스트 데이터가 메시지 다항식들의 정확한 숫자를 채우거나 토트로의 변환을 위한 19비트들의 정확한 배수를 채우는 것 같지 않다. 203,204,205 & 206에서 기술된 프로세스를 사용하여 완전히 채워질 수 있는 모든 다항식이 처리될 때, 마지막 메시지 다항식은 메시지 메카니즘의 말단을 사용하여 완성된다(§9 참조). 이 메카니즘은 12 터트의 메시지 마커의 말단을 생성한다. 이 마커는 보통 텍스트에 포함되고 마지막 불완전 메시지 다항식에 맞지 않을 수 있다. 이런 경우에, 메시지 마커의 말단은 다른 메시지 다항식으로 흩어질 것이다. 마지막 다항식은, 만일 필요하다면, 랜덤 터트로써 완성된다.
208. 마지막 불완전 보통 텍스트 메시지 다항식과 메시지 마커의 말단을 포함하는 마지막 메시지 다항식(또는 가능하게는 마지막 2개 메시지 다항식)은 모든 다른 메시지 다항식과 동일한 방법으로 암호화된다.
209. 바이트를 채우기 위해서 팩되고, 0 으로 완성된 마지막 불완전 바이트(만일 존재 한다면)를 가지고, 그 연관된 검사 블록 바로 앞에 위치하는 각 암호화된 다항식의 접합은 암호화된 메시지(암호텍스트)를 형성한다.
3.3 복호화
여기서는, 도 3에서 나타난 것과 같이, 텀블러 복호화 시스템이 기술된다. 이것은 NTRU 특허 출원(도 5)에서 기술된 최초 복호화 시스템과 비교되고 대조되어야 한다.
301. 복호화 시스템은 알고리즘 파라미터Nq, 암호 텍스트 E, 개인키 다항식,f및 F3, 에러 수정 단계, 및, 만일 필요하다면, MTA key,k를 취한다. 이 프로세스는 SHA-1 해시 함수, H()를 사용한다. 도 3에서, ∥표시는 각 측면에 대한 객체의 접속을 의미하기 위해 사용된다.
302.i는 특정한 암호화된 다항식을 순서대로 언급하기 위해서 사용되는 카운터(counter)이다. R은 아직 사용되는 MTA 보호를 가지고 복호화된 보통 텍스트 데이터를 포함할 것이다(§7 참조).
303. 각 암호화된 다항식 및 그것의 관련 검사 블록은 209에서 사용된 패킹(packing) 시퀀스를 단순히 역전시킴으로써 암호텍스트로부터 재건된다.
304. 이 메시지는 개인키 및 역 공개키에 의해 곱해진다. 이것은, 제 1 곱셈의 결과는 이것이 에러 수정을 위해 필요한 경우에 저장된다는 것만을 제외하고는, 제 1 NTRU 특허 출원에서 기술된 방법과 동일하다(도.5, 단계 570 및 580).
305. 해시는 복호화된 다항식b i 를 메시지 다항식m i 로 취급하여 205(§6 참조)에서의e i m i 와 동일한 방법으로e i b i 로부터 만들어진다. 이 해시는 송신된 검사 블록B i 과 비교된다. 다항식에 에러 수정이 필요한 경우에, 많은 이런 해시들은 동일한e i 를 사용하여 계산될 필요가 있을 것이다. 따라서, ei입력 이후 bi입력 이전에 해시 함수의 상태를 저장하는 것은 효율적일 것이다.
306. 전달된 검사 블록이 305에서 만들어진 해시와 일치한다면, 복호화된 다항식,b i 는 원래i th메시지 다항식으로 받아들여진다. 이런 메시지 다항식들의 터트는 비트로 다시 변환될 필요가 있다(§8 참고). 이 변환은 12 터트의 세트로 실행된다.
307. 비트 투 터트(bit to tert)변환은 19 비트의 세트들을 12 터트의 가능한 세트들의 서브세트로 변환한다. 12 터트의 세트가 이 서브세트의 항일 때, 이것은 비트로의 변환을 위해 전달한다; 그렇지 않으면, 이것은 변환된 19 비트의 세트가 아니고 메시지 마커의 말단이다(§9 참조).
308. 터트가 비트로 변환되고(§8 참조) 결과는 R에 접속된다. 물론 R은 2진 스트링이다(바이트의 시퀀스를 나타냄).
309. 이전의 다항식을 복호화하고 나면, 복호화 시스템은 다음 암호화된 다항식으로 진행한다.
310. 만일 송신된 검사 블록이 305에서 생성된 해시와 일치하지 않으면, 복호화된 다항식,b i ,는 원래i th메시지 다항식이 아니다.
311. 만일 선택적 에러 수정이 활성화 되면, 에러 수정 시스템은 원래 메시지 다항식을 복원하려고 한다(§5 참조).
312. 에러 수정 시스템은 그것의 성공을 다시 알려줄 것이다. 만일 성공적이라면, 결과b i (a는 304에서 계산된b i 와 다르다)는 다음 메시지 다항식으로 받아들여지고, 암호는 정상적으로 계속된다.
313. 만일 에러가 발생되고, 수정되지 않는다면, 이 점에 도달한다. 그러므로, 원래 보통 텍스트는 복원될 수 없다. 대부분의 경우에, 전체 메시지는 이 단계에서 버려진다. 이것은 대부분의 PKCS의 사용은 전체의 손상되지 않은 메시지를 원하기 때문이다. 그러나, 결과 보통 텍스트의 어떤 바이트가 통상의 부정확한 메시지 다항식과 관련되지를 간단히 기록하고, 단계 306으로 넘어가서 정상적으로 계속되는 것은 가능하다. 단지 부정확한 메시지 다항식으로부터 직접 변환된 이런 보통 텍스트 비트들만이 영향을 받게 될 것이다.
314. 12 터트의 범위를 벗어나는 세트는 메시지 마커의 말단을 나타낸다. 터트의 모든 이전 블록은 비트로 변환되고 R에 접속된다. 마침내, 이 블록은 메시지 메커니즘의 말단을 사용하여 복호화된다(§9 참조). 이것은 R 안에 포함된 다소의 비트를 제거하는 것이 필요할 수 있다. 아직 변환되지 않은 터트는 버려진다.
315. 이 단계에서 R은 계속 사용되는 MTA 보호를 가진 보통 텍스트 데이타이다. 제 1k바이트는 MTA 키 K를 형성한다. 이것은 시퀀스 발생기 S(K)를 시드하기 위해 사용된다. 만일 MTA 보호가 사용되지 않는다면,k=0, K=ø이다. 시퀀스 S(K)는 논리적으로 모두 0 이 될 것으로 생각된다. 실제로, 모든 0의 시퀀스는 아무런 영향이 없다. 이것은 S( ø)!과 동일한 것은 아니다. S(K)로부터의 출력은 P를 산출하기 위해서 R과 XOR 연산이 된다(§7 참조).
316. 복원된 보통 텍스트 데이터는 2진 스트링 P이고, 실제 메시지의 바이트들 나타낸다.
4. 복호화 실패
암호 다항식이 NTRU 알고리즘을 사용하여 복호화할 때마다, 원래 메시지 다항식으로 복호화하는데 실패할 것이라는 작은 가능성이 있다.
개인키f를 사용하여 암호 다항식e를 복호화하기 위해서, 맨 처음 아래식을 계산하고
a≡f*e(modq),
-q/2+1에서 q/2까지의 간격에서 a의 계수들을 선택한다. a를 정수 계수를 가진 다항식으로 다루어, 메시지 다항식은 다음의 계산에 의해 복원될 수 있다.
F p *a(modp),
여기서F p f모듈로p(Fp *f≡1(modp)의 역이다.
다항식a는 다음을 만족시킨다.
a≡f*ef*φ*h+f*m(mod q)
=f**F q *g+f*m(modq)
=*g+f*m(mod q)
이 마지막 다항식*g+f*m를 고려하라. 적절한 파라미터를 선택하기 위해서, 거의 모든 경우에, 모든 그 계수들은 -q/2+1과 q/2 사이에 놓이게 하는 것이 가능하므로, 그 결과로 그 계수가 모듈로q로 축소될 때 변하지 않는다. 이것은 f * e 모듈로 q의 계수를 -q/2+1 에서 q/2 까지의 간격으로 축소해서 다항식을 정확하게 복원한다.
a=*g+f*m.
'적절한 파라미터 선택'은 주로 §2에서 정의된d g (N),d φ (N) 및d f (N) 값을 언급한다. 이런 값들이 작아질수록, 다항식g,φf에서의 계수들의 더 큰 부분이 0이 된다. 이런 결과로서, 상기 다항식에서의 계수가 0에 근접할 확률은 커진다. 그러나, 이런 값들은 얼마나 많은 각각의 타입의 가능한 다항식들이 있는지 그리고, 암호의 보안이 얼마나 효과적인지를 결정한다. 만일 이 값이 충분히 크다면, 공격자가 적당한 시간 안에 그것의 정확한 값을 추측할 수 있는g,φf의 너무 많은 가능한 값이 존재하게 될 것이다. 만일 이 값이 너무 작아서 상기 다항식에서의 어떤 계수가 -q/2+1 에서 q/2의 범위 바깥에 놓이게 될 확률이 없다면, 암호의 보안이 위태롭게 될 것이다.
텀블러에서 사용되는 파라미터 선택은 다항식*g+f*m이 -q/2+1 에서q/2의 범위 바깥에 놓이게 되는 계수를 갖게 되는 확률이 약 10000분 1이다. 이것은 어떤 계수(들)의 값이 복호화의 제 1 단계 동안에 ±q만큼 옮겨지게 될 것이고 따라서 변형된 값 모듈로 3을 갖게 될 것이다.
도 5, 6 및 7은 랩핑 에러에 대한 가시적인 예를 나타낸다.
도 5는 최소 양수 나머지 모듈로q로 축소된 다항식f*e예를 도시한다. 50개의 계수들은 그 값(0 과 q 사이)에 비례하는 높이에 위치하는 도트(dots)에 의해 표현된다. 이것은 복호기가 복호화 프로세스를 통해 부분적으로 복원시킬 다항식이다. 다항식은 최소 양수 나머지 클래스(class)들을 사용하여 전시된다. 컴퓨터에서 가장 단순한 축소 모듈로 2의 거듭제곱은 이런 클래스에 숫자를 남길 것이기 때문이다. 메시지를 복원하기 위해서, 다항식은 최소 절대 나머지 클래스들(-q/2+1 와 q/2 사이) 속으로 이동하여야 한다. 그러나, 다항식의 통상의 형태는 가장 부정확하게 랩(wrap)할 것 같은 모든 계수들이 다항식의 중심에서 함께 모여지는 장점을 가진다. 이 지역이 도면에서 부각된다(501로 표시된 지역).
도 6은 최소 절대 나머지 클래스 모듈로q로 변이된 것을 제외하고는 도 5와 동일한 다항식을 보여준다. 도 5에서 501로 표시된 지역은 2개로 분리되었고 601 및 602로 표시된다. 도 5에서 502로 표시된 계수는q/2 라인 바로 위에 있었는데q만큼 아래로 이동되고 이제 도면의 바닥에 위치하게 된다(603으로 표시됨). 이것은 원래 메시지 다항식을 복원하기 위해서 F3과 컨벌루션되어질 다항식의 형태이다.
도 7은 다항식*g+f*m를 도시하는데, 도 5 및 6에서 도시된 다항식과 관련되어 있다. 이 다항식은 모듈로q로 축소되지 않는데, 도 6의 다항식과 정확하게 일치하도록 그 계수가 -q/2+1에서 q/2의 범위 내에 모두 놓이게 되기를 바란다. 만일 그렇다면, 메시지가 에러 없이 복원될 것이다. 이것은 적절한 파라미터 선택에 의해, 모든 그러나 매우 작은 부분의 경우에 일어나게 될 것이다. 이런 예에서, 703으로 표시되는 계수는 정해진 범위 바깥에 놓인다. 이것은 도 6에서 도시되는 다항식f*e는, 이 다항식 모듈로q와 동등한 반면에, 모듈로 3과 동일하거나 동동하지 않다. 701계수는 도 6에서 603으로 표시된 위치에 랩이 된다.
에러가 발생했는지 또는 발생하지 않았는지를 알 수 있는 수단이 존재한다는 것은 중요하다. 다항식φ는 암호화하는 사람에게만 알려진다. 반면에 다항식gf는 해독하는 사람에게만 알려진다. 따라서, 랩핑 실패가 발생할 것인지를 예측하는 것은 불가능하다. 실패를 감지하는 것은 암호화/복호화 과정 동안에 원래 데이타의 완전성을 확인하는 일종의 검사 해시의 사용을 포함한다. 이런 검사는 어떤 형태의 공격을 막는데도 필요하다.
암호화 실패를 탐지하기 위해 텀블러에 의해 사용된 메커니즘은 §6에서 자세하게 설명되고, 이런 에러를 수정하는 수단은 §5에 나타난다.
5. 에러수정
랩핑 에러(wrapping error)는 NTRU 암호가 제안되었을 때 인지된 문제였다(NTRU 특허출원 §1.3, 31페이지). 그러나, 이를 해결하기 위해 제안된 루틴은 흠이 있었으며 많은 랩핑 실패의 경우를 수정하지 못했다. 상기 방법은 다항식 a 를 3의 배수만큼, 위로 이동시키는 것을 포함하였다. 이것은 부정확하게 랩되어진 계수의 값을 변경시켜서 랩되지 않도록 하였고, 이들이 모듈로 3으로 감소되었을 때는 어떤 계수들의 값도 변경시키지 않았다. 불행하게도, 이것은 부정확하게 랩되어 그 값이 범위의 다른 끝단에 놓여진 계수를 종종 야기하였는데, 이전에는 이러한 것이 발생하지 않았다.
제안되었던 랩핑에러수정은 갭 실패(gap failure)로서 알려진 에러를 또한 수정하지 못했다. 이것은 부정확하게 랩되어진 계수가 동일한 부호의 정확하게 랩되어진 계수만큼 적어도 0에 가까운 값을 가질 때 발생한다. 이들 실패가 극히 드물다고 생각하였으므로, 이는 문제로서 본래 고려되지 않았다. 갭 실패는 실제로 매 천만개의 다항식에서 한번 발생할 수 있으며, 많은 에플리케이션에 의해 충분히 자주 발견된다.
텀블러의 에러수정 시스템의 원리는 간단하다. 에러가 있다면 그것을 발견하고 수정한다.
단순하게 본다면, (모듈로 3 값으로 처리될 때) 2개의 가능한 방법에서 잘못될 수 있는 N개 계수들이 있다는 어려움이 있다. 또한 다수의 동시발생 에러들 있을 수 있다. 그러므로 모든 가능한 에러를 검사하는 것은 작동될 때까지 모든 가능한 3진수 다항식을 시험하는 것과 같다. 암호의 본성으로 인해 이는 실행불가능한 양의 시간이 걸릴 것이다. 더욱이, 에러는 복호화 실패에 의해 야기되는 것이 아니라 전송에서의 에러나 공격자에 의한 의도적 변경에 의해서 야기될 수 있다.
텀블러 해결방안은 모든 가능한 에러가 동일하게 산출되지 않는다는 사실에기초를 둔다. 가장 가능한 것 같은 에러로부터 가장 가능하지 않을 것 같은 에러까지 에러의 가능한 원인에 대해 순서를 매긴다면, 매우 효율적인 검색이 에러의 원인을 위해 수행될 수 있다. 실제로, 복호화 실패의 가장 일반적인 원인은 (텀블러에서 현재 사용되는 매개변수 선택을 위해) 10000개중 대략 9999개의 에러 원인이 될 것이다.
§4에서 복호화 실패의 원인을 상기하면, 어떤 다항식의 계수는 -q/2+1 에서 q/2 범위 내에 거의 항상 있도록 알고리즘 매개변수가 선택된다. 상기 매개변수들이 범위 내에 있지 않을 때 복호화 실패가 발생한다고 한다. 한 계수가 이 범위 밖에 위치할 가능성은 실제로 다항식 당 약 1/10,000 정도이다. 2개의 계수가 동시에 이러한 범위 밖에 위치할 가능성은 다항식 당 약 1/100,000,000 미만이며, 더 많이 동시에 작용하는 에러에 대해서도 이러하다. 또한, 계수가 이 범위 밖에 놓일 때, 계수는 언제나 조금만 벗어나 있다. 거리가 더 클수록, 계수가 범위 밖의 그 거리에 있게 될 가능성이 더 줄어든다.
더욱이, 계수가 이 범위 바로 위에 있다면 범위의 하단에 랩되어질 것이다. 계수가 이러한 범위의 바로 아래에 있다면, 상단에 랩되어질 것이다. 계수가 범위 바로 위에 있는 경우에서 계수의 값은 너무 작은 q가 될 것인데, 이것은 계수가 너무 작은 x 모듈로 3이 된다는 의미하는 것으로, 여기서 x는 q 모듈로 3의 가장 작은 양의 나머지이다. 계수가 범위 바로 아래에 있는 경우, 계수는 너무 큰 x가 될 것이다.
이것은 에러를 발견하는 간단한 수단을 제공한다. -q/2+1 에서 q/2 범위의상단과 하단에 가장 근사하게 놓인 값이 검사되고, (값이 각각 범위의 하단 또는 상단에 있는지에 따라) x를 더하거나 뺌으로써 이들의 값 모듈로 3을 수정하려는 시도가 행해진다.
도 8은 (§4에 설명된) 도 5의 그래프와 동일한 그래프를 도시하고 있다. 선 q/2를 둘러싸는 영역이 강조되고 있으며 801로서 표시되어 있다. 이 영역 내에 놓인 계수들은 거의 에러를 야기할 것 같은 계수들이다. 선 q/2에 근접하는 순서대로 첫번째 5개의 계수들(802, 803, 804, 805 및 806)이 표시되어 있다. 가장 에러를 유발할 것 같은 원인은 너무 작은 x 값을 가지는 802로 표시된 계수일 것이다. 이는 §4에서 예로서 기술된 바로 그 에러이며, x를 이 계수의 값에 더함으로써 에러를 실제로 수정할 것이다.
이들 에러를 수정하기 위해 사용해야 하는 정확한 방법은 암호가 사용되는 용도 및 암호가 구현되는 플랫폼에 주로 의존한다. 한 알고리즘 예가 하기에 제시되어 있다. 이러한 방법의 전제는 효율성은 가능한 한 빨리 다중의 수정시도를 함으로써 달성될 수 있다. 그러나, 10000개 에러 중 9999개가 첫 번째 시도에서 수정될 것이다. 가장 가능성 있는 에러에 대해 가장 짧은 시간에 검사하고 첫 번째 시도가 실패한다면 검색을 계속 수행하기 위해 필요로 하는 작업만을 행하는 것이 속도 면에서 명백히 최선이다.
에러가 모든 10000개 다항식에서 한번의 정도로만 발생하므로, 속도 차이는 평균적으로 작으며 일정한 흐름속도가 문제가 될 때에만 중요하게 될 것이다. 본 명세서에서 기술한 방법은 일부 이점을 가진다. 적절한 G표가 제시되면(하기를 참조), 합당한 시간 내에 모든 복호화 에러를 수정할 것이다. 첫 번째 몇 단계 후, 원래 데이터는 매우 효율적인 포맷에 저장될 수 있으며, 원래 모듈로 q 데이터가 결코 다시 인용될 필요가 없다.
도 4는 하기의 에러수정 알고리즘의 플로우차트이다. 어떤 등가의 알고리즘도 NTRU 특허 출원에 나타나 있지 않다. 이러한 플로우차트는 복호화 시스템(도 3참조)을 기술한 플로우차트에 대해 대응물로서 도안된다.
401. 에러수정 루틴은 알고리즘 매개변수 N과 q를 사용한다. 개인키 그 자체가 아니라 개인키의 역, F3를 또한 사용한다.
수정레벨은 얼마나 에러수정 루틴이 계속되어야 하는 가를 결정한다. 에러수정은 0이 아니어야 하거나, 에러수정 루틴은 결코 첫 번째 위치 내에서 호출(call)되지 않는다. 거의 모든 에러는 매우 빠르게 수정된다. 수정레벨은 얼마나 확실히 에러가 복호화 실패와는 다른 원인에 기인하여 될 수 있는지를 제어하도록 한다. 에러의 원인이 전송에 있을 때, 임의의 큰 수정레벨은 임의의 긴 시간동안 처리를 계속하도록 야기할 것이다. 임의의 존재하는 에러는 첫 번째 몇 번의 시도로 매우 잘 수정될 것이다. 그러므로, 아직 검출되지 않은 에러의 가능성은 무시할 수 있다는 것과 다항식 복호화의 실패는 메시지 전송동안 발생된 문제에 의해 더 야기된다는 것을 매우 빨리 결정할 수 있다.
수정루틴은 반 복호화된 mod q 다항식 ai와 암호 다항식 ei를 취한다. 이들은 복호화 시스템에 의해 사용된 다항식과 관련이 있다(도 3 참조). ei는 검사 블록을생성하기 위해서만 사용된다. ei를 입력하고, 새로운 검사가 필요할 때, 새로운 해시 인스턴스(hash instance) 대신에, ei를 입력하고 본 상태로 복귀한 후 해시 함수의 상태를 기록함으로써 반복적으로 해시 인스턴스에 ei를 입력하는 것을 피할 수 있다.
표 Gjk는 실험으로부터 만들어진다. 그리고, 표 Gjk는 동시발생 에러의 가변적인 갯수가 다양한 깊이(depths)로 수정되는 순서를 제어하도록 한다. 거의 모든 에러가 즉시 수정되므로, 처음 2개의 항목을 넘어서서 이러한 표에 대한 이상적인 값들을 결정하는 것은 어렵다. 결과적으로 정확한 값을 별로 중요하지 않다.
402. 수정된 레벨은 수정레벨과 비교하기 위해 사용되는 간단한 카운터이다.
값 j는 표 G와 연계하여 사용된다. 이것은 G의 어떤 열이 현재 사용되고 있는지를 알려준다.
x의 값은 부정확하게 랩되어진 모듈로 q 값이 모듈로 3을 얼마나 많이 변경하는 지를 알려준다. 더 일반적으로, NTRU 특허출원의 p값이 3과는 다른 어떤 값이 되도록 선택된다면, x는 다음과 같이 계산될 것이다:
x = q rem p.
다항식 모듈로 q를 센터링(centering)하는 것은 (0 부근으로 위치 조정되는)최소 절대값 나머지 클래스(class)들로의 이동을 의미한다. -q/2+1 에서 q/2 범위를 이용할 필요가 없다는 것을 주목해야 한다. 대신에 -q/2 에서 q/2-1 범위를 이용할 수 있다.
403. 이 지점에서, -q/2 및 q/2 에 대한 그들 값의 근접성에 따라서 ai계수들을 정렬하는 표가 생성된다. q/2 와 정확히 동일한 값들이 단계 402에서 랩되었다면, 음의 값으로 된 계수들은 동일한 절대 값을 가진 양의 값으로 된 계수들 이전에 나열되어야 한다. -q/2 와 정확히 동일한 값이 랩되었다면 양의 값으로 된 계수들은 동일한 절대 값을 가진 음의 값으로 된 계수들 이전에 나열되어야 한다. 도 8에서 기술된 예에서, 표는 상기 순서대로 802, 803, 804, 805 및 806으로 표시된 계수로 시작할 것이다. 계수 값 그 자체가 아니라 상기 범위의 경계로부터의 각 계수 값의 거리만을 기록하는 것이 가능하다. 전체 값을 사용하면 프로세스를 따르기가 좀 더 용이하기 때문에, 전체 값이 여기서 사용된다.
404. 모듈로 3으로 감소된 후, 원래의 모듈로 q 다항식 ai는 더 이상 사용되지 않는다.
405. k가 초기화된다. 이는 검사가 행해지는 동시 발생하는 에러의 수를 제어할 것이다. 우선 첫째로 어떤 부정확하게 랩되어진 계수에 대해 검사가 행해진다.
406. 여기서 검사가 표로부터 행해져야만 하는 현재 깊이를 취한다. 표의 제 1 열에 있다면, 검사 절차는 깊이 0에서 시작해야 한다. 한 값이 이전 j 에 대한 값보다 크지 않다면 407에서는 어떠한 검사되지 않은 k 터플(tuple)들도 없으며, 알고리즘은 다음 k 값으로 곧장 넘어갈 것임을 주목해야 한다.
407. 알고리즘은 ±q/2로부터 단지 소정의 거리 내에만 떨어져 있는 값들을가진 모든 k 터플의 계수들을 검색한다. 이 지점에서, 아직 검사되지 않고 남겨진 어떤 k 터플이 있는지 결정된다. 더 작은 깊이로 검색동안 검사된 k 터플은 다시 재검사될 필요가 없다.
408. 값들이 모두 주어진 범위 내에 있는 k 터플의 계수들이 선택된다. 이러한 k 터플은 이전의 알고리즘 반복에서 선택된 어떤 k 터플과는 구별되어야 한다. 그 후, 선택된 k 터플의 값들은 있을 수 있는 미스 랩핑(mis-wrapping) 모듈로 q을 위해 모듈로 3을 보상하도록 변경된다.
409. 변경된 ai'를 이용하여, 복호화 프로세스가 완성된다.
410. 복호화된 다항식과 암호 다항식이 무결성 검사를 통과하는지를 알아보기 위해 검사가 행해진다.
411. 만일 무결성 검사가 통과되었다면, bi가 다음으로 복호화될 다항식으로 받아들여진다.
412. 가능한 k 터플이 다 없어져버리면, 이제 ±q/2에서 더 큰 가능한 거리에까지 검색이 확장된다.
413. (j,k)에서 표 G의 값은 현재 k 값을 위한 k 터플에서의 에러를 검색하는 것을 중지해야만 하는 깊이를 제시한다.
414. 의도된 검색의 범위에 대해, 얼마나 멀리 검색되었는가를 기록하는 카운터가 증가된다. 전용 카운터를 가지는 것보다는 이를 달성하는 명백히 더 경제적인 수단들이 있다.
415. 이 지점에서 수정된 레벨이 제공된 수정레벨에 도달했는지를 알기 위해 검사가 행해진다.
416. 만일 검사가 복호화된 다항식으로 단계 411에서 정지됨이 없이 수정레벨이 정해질 때까지 수행된다면, 검색은 포기되고 다항식은 수정되지 않은 채 있게 된다. 실제로, 최소의 수정레벨로 복호화 실패와는 다른 어떤 것에 의해 에러가 야기될 때만 발생될 것이다.
417. 수정절차가 수행되어져야하는 동시발생 에러의 수를 증가시킨다.
418. G 열은 0으로 끝난다. 끝이 도달될 때, k는 리셋(reset)되고, 싱글톤 에러(singleton error)를 위해 검색이 다시 시작된다.
419. 알고리즘이 G의 다음열로 이동한다.
다음의 예는 표 G가 어떻게 사용되는지 더 상세하게 도시한다.
ai= 45 - 117x - 127x2- 45x3- 117x4
q/2 = 128
인덱스 부호
0 45 +
1 117 -
2 127 -
3 45 -
4 117 -
인덱스 2는 가장 큰 절대값을 가진 계수에 대응한다. 인덱스 1과 3의 계수들은 동일한 절대 값과 동일한 부호를 가지므로, 이들 2개 중 어느 것이 먼저 열거되는 지는 완전히 임의적이다. 나머지 예를 위해 1이 먼저 열거될 것이다. 인덱스 0과 4는 동일한 절대값과 다른 부호를 가지므로, -127에서 128 범위를 이용한다고 가정하면 3이 먼저 열거된다.
그러므로 처리결과의 순서화는 {(2,-127), (1,-117), (4,-117), (3,-45), (0,45)}가 될 것이다.
q = 128 = 3 * 43 + 2. 그러므로 x = 2.
단순화된 표 (Gjk)를 고려한다.
k=1 k=2 k=3 k=4
j=1 3 2 0 0
j=2 11 11 4 0
j=3 11 11 5 0
j=4 15 15 11 1
이 표는 에러를 위해 검사하는 최선의 순서를 나타낸다. 어떤 단계에서 에러가 발견되고 수정된다면, 검사 절차가 중단될 것이다.
절차는 -128 또는 128과 동일한 싱글톤 에러를 수정하기 위한 시도와 함께 출발한다. 아무것도 없으므로, -128 에서 -127 또는 127 에서 128 범위내에 싱글톤에 대해 진행한다. 이들 범위는, 샘플 순서에서 첫번째 인덱스, 즉, 2에 의해 지시된 바와 같이, 그러한 계수를 포함한다. 이러한 계수는 음이므로 알고리즘은 2를 더함으로써 수정하도록 시도한다. 이러한 예를 위해 이것은 실패한 것으로 가정해야 한다.
G(1,1) = 3이므로, 범위 -128 에서 -126 또는 126 에서 128의 범위내에 모든 싱글톤들을 시도할 때까지 싱글톤들을 수정하기 위해 계속 시도해야 한다. 상기 범위에서는 더 이상의 싱글톤은 없다.
이 지점에서는, 한 쌍을 수정하려고 시도하는 것이 더 낫다. 그러나, G(1,2)=4. G(1,3) 0에 의해 특정된 가장 큰 범위 내에 어떠한 쌍도 없으므로, 이제 G의 다음 열로 전환해야 하고 한번 더 싱글톤 에러를 위해 검색을 시작해야 한다.
깊이 3으로 이전 열에서 멈추는 곳에서 검색이 시작되고, 깊이 10이 될 때까지 싱글톤을 위해 표를 검색해 내려간다. 10에서 2개 이상의 가능성 있는 에러가 발견된다. 한 번 더, 이들 에러를 수정하는 것이 실패하는 것으로 가정해야 한다.
이제 깊이 4에서 검색이 멈춘 곳에서 시작하는 또 다른 시도가 한 쌍의 에러에 대해 수정하기 위해 행해진다. 깊이가 10에 도달하면, 3개의 계수가 범위내에서 발견되므로, 3개의 잠재적인 쌍이 있다. 인덱스 2가 표에서 처음이기 때문에 이들 쌍들은 하기의 순서로 수정될 것이다:(2,1), (2,4) 및 마지막으로 (1,4).
이 예에 대해 이들 쌍 중 하나가 정말 에러의 원인이었던 것으로 가정되어야 한다. 그러나, 실제로 에러는 처음 몇 번만의 시도에서 거의 항상 수정될 것임을 기억하는 것이 중요하다.
6. 텍스트 인지
암호 시스템이 암호화된 데이터는 그것과 연관된 보통 텍스트가 유효하게 암호화된 것인지를 결정할 수 있다면, 암호 시스템은 보통 텍스트(plaintext)를 인지한다라고 말한다. 이는 대개 일종의 검사 해시(check hash)로 달성된다.
시스템의 용도에 따라, 보통 텍스트를 인지하지 못하는 시스템은 공격에 취약해질 수도 있다. 시스템의 인지 결여를 이용하는 공격은 하기의 방식으로 작동한다:
공격자는 암호화된 메시지를 가로챈다. 그런 후 공격자는 암호화된 메시지를 약간 변경하고, 메시지를 원래 의도된 수신자에게 보낸다.
이러한 약간의 변경은 때때로 메시지를 무효한 암호텍스트, 즉, 어떤 보통 텍스트로부터의 암호화된 형태로 될 수 없는 암호 텍스트로 바꿀 수 있다. 이런 경우 복호기(decoder)는 메시지를 복호화할 수 없으며, 일반적으로 메시지가 복호화하는데 실패했다고 (이러한 시나리오에서 공격자인) 송신자에게 알려질 것이다.
선택적으로, 변경된 메시지는 유효한 암호 텍스트일 수 있다. 이러한 경우 디코더는 메시지를 복호하고 해석하려고 시도할 것이다. 반면 암호화되는 동안 변경되었으므로, 디코더는 어떤 메시지의 뜻도 알 수 없을 것이지만, 이는 공격과는 무관하다.
공격자는 이러한 프로세스를 여러 번 반복하여, 각 단계에서 어떠한 변경이 유효한 암호 텍스트를 산출하는지를 기록한다. 이러한 분석에 의해, 공격자는 원래 메시지의 일부를 결정할 수 있다.
텀블러는 이러한 접근법을 더욱 취하여, 자동적으로 보통 텍스트와 암호텍스트 모두에 기초한 정규의 해시 검사를 생성한다. 이는 텀블러를, 일반적으로, '텍스트 인지'로 기술할 수 있도록 한다.
텀블러는 SHA-1(보안 해시 알고리즘 1, Secure Hash Alogrithm 1)을 이용하여 각 암호화된 다항식을 위한 검사 해시를 계산한다. SHA-1은 미국 정부의 국제표준협회 및 기술보안 해시 표준에 정의되어 있다(FIPS 180-1).
각 메시지 다항식이 암호화됨에 따라, 원래 메시지 다항식과 결과로서의 암호 다항식 둘 다는 SHA-1 알고리즘의 인스턴스로의 입력으로서 사용된다.
암호화동안, 암호 다항식은 복호화 에러의 경우에서 복호화 프로세스를 촉진할 때 먼저 입력으로서 취해진다. 암호 다항식은, 먼저 하기에 기술한 바와 같이, 전송을 위해 바이트를 채우도록 팩(pack)된다. 첫 번째 계수를 나타내는데 필요한 비트는 첫 번째 바이트의 최하위 끝단에 위치되고, 등등 이하 동일하게 반복되며, 필요하다면 마지막 바이트는 설정되지 않은 비트로 마무리된다.
그런 후 메시지 다항식은 바이트를 채우도록 팩되며, 이 때 각 계수는 2 비트로 나타내진다. 대응하는 계수가 0이면 두 비트 모두는 설정되지 않으며(unset); 대응하는 계수가 -1이면 첫 번째 비트가 설정되고(set) 두 번째 비트가 설정되지 않고(unset); 대응하는 계수가 1이면 두 비트 모두가 설정된다(set). 첫 번째가 설정되지 않으면서 두 번째 비트가 설정되는 경우는 결코 없다.
팩되어진 암호와 메시지 다항식은 접합되고, 그런 후 SHA-1 알고리즘을 이용하여 함께 해시된다. 그런 후 해시된 출력은 암호 텍스트와 함께 (암호화되지 않음) 수신자에게 전송된다. 전형적으로, 해시의 추가는 전송되는 텍스트의 양에 약 20 바이트를 추가하게 될 것이다. 더 적은 추가 바이트가 사용될 수 있나, 이는 보안성을 낮추게 될 것이다.
메시지 다항식 {-1,0,1,1}은 10001111 바이트로서 암호화될 것이다.
마지막 바이트는 필요하다면 설정되지 않은 바이트로 마무리된다. 이러한 암호화된 형태에서 다항식은 팩되어진 암호텍스트의 끝에 접합되고, 수신자에게 전송을 위해 해시된다.
복호화동안, 암호 텍스트와 복호화된 메시지 다항식은 접합되고 SHA-1으로 입력된다. 그런 후 SHA-1으로부터의 출력은 암호화 프로세스동안 계산된 원래 해시와 비교되고, 암호 텍스트와 함께 수신된다.
따라서, 공격자가 암호화된 메시지를 변경한다면, 비록 변경된 데이터가 복호될 수 있다 하더라도, 복호화된 메시지의 해시를 원래 메시지의 해시와 부합시키는 것은 계산상으로 실행 불가능하다. 이는 암호 텍스트를 변경하여 이 시험을 통과시키는 것이 본질적으로 불가능하게 한다.
그러면 시스템은 해시가 원래의 것과 부합하지 않는 모든 메시지를 거부하는 한편, 암호 텍스트가 유효했었는지를 송신자에게 알리지 않도록 주의한다.
랩핑 실패가 복호화된 메시지 다항식에서 실패를 야기했을 수도 있다는 것이 가능하다. 만일 에러수정이 스위치 온 되면, 암호는 전술한 알고리즘을 이용함으로써 실패를 수정하려고 시도할 것이다. 각 단계에서 에러가 고쳐졌는지를 알기 위해 검사 해시를 재계산할 필요가 있을 것이다. 암호 텍스트는 그대로 있으며 단지 검색된 메시지 다항식은 각 검사를 위해 다르므로, 암호 텍스트를 해시로 단 한번 입력하고 메시지 다항식을 매번 입력하는 것이 가능하다.
암호 텍스트와 보통 텍스트 둘 다에 대한 무결성 검사를 생성하기 위해 암호텍스트와 보통 텍스트를 함께 해시하는 일반적인 방법은 NTRU 의존적이지는 않으나, 다른 암호문에 대해 동일하게 잘 작동한다.
7. 다중 전송
텀블러는 다중전송공격(Multiple Transmission Attacks, MTAs)으로부터의 보호를 추가하는 옵션을 포함한다.
동일한 공개키를 이용하여 MTA 보호없이 동일한 메시지가 한번 이상 암호화되어 전송된다면, 공격에 취약하게 된다.
2개 메시지 사이의 예측가능한 유사 가능성을 인지하는 것이 중요하다. 전자메일에 사용되는 것과 같이 메시지 헤더들은 가장 명백하게 동일시 할 수 있으며, 종종 예측가능하다. 몇몇의 메시지들의 처음 몇 바이트들이 동일하다면, 이들의 처음 메시지의 다항식이 또한 동일할 것이므로 MTA에 취약할 것이다.
가격표가 일반적인 방식으로 전송된다고 가정하자, 만일 공격자가 가격이 변경되지 않았다고 올바르게 가정한다면, 이는 또한 공격자로 하여금 MTA를 이용하게 할 것이다.
단일 메시지 다항식의 보안은 그 다항식의 암호화에 사용되는 랜덤인자에 종속적이다. 만일 공격자가 랜덤인자를 결정할 수 있고 공개키에 억세스 가능하다면, 공격자가 원래 메시지를 복원하는 것은 대수롭지 않다.
매번 메시지가 보내질 때마다, 랜덤인자는 각 다항식에 대해 '전송중'이라고 결정된다. 이는 정확하게 동일한 메시지가 한번 이상 보내진다면 다른 랜덤인수를 포함할 것임을 의미한다. 만일 공격자가 2개 이상의 도중에 가로챈 메시지가 정확히 동일한 메시지임을 안다면, 공격자는 사용된 랜덤인자를 결정하기 위해 이들 메시지를 비교한다.
심지어 MTA 보호없이 단지 2개의 복사본으로부터 전체 랜덤인자들을 결정하는 것은 일반적으로는 불가능하다. 그러나, 2개의 복사본을 보내는 것만으로 메시지의 보안을 상당히 손상시킬 수도 있는 한편, 다중의 복사본을 보내는 것으로 인해 공격자는 대부분의 메시지(및 결국 모든 메시지)를 결정할 수 있다.
텀블러 MTA 보호시스템은 랜덤하게 선택된 키와 함께 단순한 스트림 암호를 이용하여 (예를 들면, 의사 랜덤 숫자 (난수) 발생기(pseudo-random number generator)를 이용하여), 보통 텍스트 메시지가 동일한 키로 보내진 어떤 다른 동일한 메시지와는 랜덤하게 다르다는 것을 보장한다. 스트림 암호는 그 키와 함께 전달되기 때문에 메시지의 보안을 직접적으로 추가하지 않으므로, 특별히 보안 암호일 필요는 없다. 그것은 2개의 동일한 보통 텍스트는 예측불가능한 방식으로 서로 다르다는 것만 보장해야 한다.
텀블러 TMA 보호 선택으로의 암호화는 랜덤(또는 의사 랜덤) MTA 키를 보통 텍스트의 시작에 추가한다. 그리고 나서, 이러한 키는 텀블러 시퀀스 발생기(Sequence Generator)(§11 및 도 2의 단계 202 참조)의 초기상태를 설정하는데 사용된다. 그런 후, 계속되는 보통 텍스트 데이터의 바이트들은 PKCS 암호로 입력되어지기 전에 시퀀스 발생기로부터의 출력과 XOR 연산된다: 도 2의 단계 203을 참조하라.
복호화동안(도 3), PKCS 암호로부터 리턴(return)된 데이터의 처음 k 바이트들은 시퀀스 발생기의 초기 상태를 설정하기 위해 사용된다(§11 참조). 계속되는 바이트들은 복호화된 보통 텍스트로서 출력되기 전에 시퀀스 발생기로부터의 출력과 XOR 연산된다: 도 3의 단계 325를 참조하라.
8. 비트를 터트로
데이터가 종래에는 비트로서 저장된 반면에, 바람직한 PKCS 알고리즘은 그 계수로서 0, 1 또는 -1 값을 취할 수 있는 다항식처럼 메시지를 처리한다. 메시지 다항식은 단지 3진수(터트)의 스트링이다. 비트를 터트로 및 다시 역으로 변환하기 위한 방법이 요구된다.
각각 19 비트 메시지의 완전한 집합이 본 발명에서는 12터트로 변환된다. 이것은 변환시에 사용되는 산술 연산이 32비트 정수를 이용하여 실행되도록 한 반면에, 98.65%의 패킹효율을 산출한다. 64비트 이상의 정수를 이용하는 방법이 더 효율적일 수 있으나, 다른 패킹 문제와 비교할 때 패킹효율 면에서 무시할 만한 이득을 나타낼 뿐이다.
8.1 비트를 터트로 변환하기
x는 최하위 19 비트들이 메시지로부터의 19 비트 블록과 동일한 구성으로 설정되고 다른 비트들이 모두 0으로 설정되는 정수가 되도록 취해져야 한다. 여기서 터트는 0, 1 또는 -1의 값을 취하는 정수인 것으로 가정한다.
1. x는 3으로 나누어지고 나머지가 계산된다. 그런 후 이 값은 다음 터트를 결정하기 위해 사용될 수 있다. 0은 터트의 값이 0임을, 1은 터트의 값이 1임을, 2는 터트의 값이 -1이라고 결정한다.
2. x는 3으로 나누어지고, 임의의 나머지는 버린다.
3. 단계 1 및 2를 총 12회 실행한다.
단계 1에서 x가 3 대신 81로 나누어지고, 그런 후 나머지는 터트의 81개의 가능한 4 터플 표(4개 엘리먼트로 정렬된 집합)와 함께 사용되어 다음 4개 터트의 값을 결정하면, 이러한 프로세스는 명확히 가속화될 수 있을 것이다. 그런 후 x는 단계 2에서 81로 나누어질 것이다. 만일 이러한 접근법이 사용되었다면, 이 프로세스는 단지 12회 대신에 3회 반복만을 필요로 할 것이다.
x를 729로 나누고, 나머지를 취하고, 터트의 729개 가능한 6 터플 표를 사용하여 다음 6개 터트의 값을 결정하고, 그런 후 x를 729로 나누는 방법을 사용하면 훨씬 더 큰 속도가 달성될 수 있다. 이러한 옵션은 단지 하나의 나머지와 하나의 나눗셈 연산을 필요로 할 것이다. 그러나, 속도 면에 있어서 이러한 향상을 제공하는 각 방법은 이에 대응하는 코트 크기의 증가로 인해 고충을 겪게 될 것이다. 속도 면에 있어서 최상의 방법은 모든 531441의 가능한 12 터플의 표에 대한 직접 검색을 이용하는 것이다.
위 방법 중 어느 것이든 사용되면, 변환 프로세스는 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} 에서 {-1, 0, 0, -1, 1, 0, -1, -1, 1, -1, -1, -1} 범위내의 값을 산출한다. 따라서, 모든 가능한 터트의 12 터플이 생성될 수 있는 것은 아니다. 이는 312=531441이 219=524288보다 크기 때문이다. 이것은, 이러한 범위 밖에 놓여있는 터트의 집합이 메시지의 말단을 나타내는데 사용되기 때문에, 중요하다.
19 비트의 마지막 불완전한 집합은, 설령 있다면, 필요한 수의 랜덤비트로써 19 비트로 패딩된다. 패딩(padding)을 제외하고, 실제 메시지 데이터의 길이는 메시지 마커의 말단 값을 결정하기 위해 기억되어 사용된다. 이에 대한 더 상세한 내용은 §9를 참조하라.
이러한 예를 위해, 처음이면서 최하위 비트로부터 마지막이면서 최상위 비트까지 정렬된 일련의 19 비트가 0101101101001100010 이다라고 가정하자. 10진수로 간주하면, 이 시퀀스의 비트는 144090이다. 각 터트의 값은 다음과 같이 계산될 수 있다:
터트 수 x를 3으로 나눌 때 나머지 3으로 나눈 뒤 x의 값(나머지는 버림) 터트 값
0 0 144090 ÷3 = 48030 0
1 0 48030 ÷3 = 16010 0
2 2 16010 ÷3 = 5336 -1
3 2 5336 ÷3 = 1778 -1
4 2 1778 ÷3 = 592 -1
5 1 592 ÷3 = 197 1
6 2 197 ÷3 = 65 -1
7 2 65 ÷3 = 21 -1
8 0 21 ÷3 = 7 0
9 1 7 ÷3 = 2 1
10 2 2 ÷3 = 0 -1
11 0 0 ÷3 = 0 0
그러므로 비트 시퀀스 0101101101001100010은 터트 시퀀스{0, 0, -1, -1, 1, -1, -1, 0, 1, -1, 0}으로 변환될 것이다.
8.2 터트를 비트로 변환하기
데이터가 복호화되었을 때 3진수 다항식의 형태를 다시 취할 것이며, 비트를 터트로 변환하기 위한 프로세스가 하기의 방식으로 역으로 되는 것이 필요하게 될것이다:
1. y가 이전 12개 터트의 집합으로부터 계산된 x 값이 되도록 취해져야 한다. 어떠한 이전 집합도 있지 않으므로, 제 1 블록에 대해서 명확히 관련되지 않는다. x는 초기에 0으로 설정되어야 한다.
2. 상기 집합에서 터트는 연속적으로 0 에서 11 까지 나열되어야 한다. i번째 터트가 0이면 0을 x에 더하고, 1 이면 3I를 x에 더하며 -1 이면 2×3i를 x에 더한다.
3. x가 19개 이하의 유효비트를 가진다면(따라서 219미만이면), y의 처음 19 비트는 원래 메시지의 다음의 19 비트이다. 만일 x가 19개 이상의 유효비트를 가진다면, 원래 메시지 데이터의 말단에 도달한 것이다.
x의 값은 얼마나 많은 y의 비트가 원래 메시지의 부분이며, 얼마나 많이 버려져야만 하는지를 정확하게 결정하는데 사용될 수 있다. 더 상세한 내용에 대해서 §9를 참조하라.
상기 계산된 12개 터트의 집합{0, 0, -1, -1, -1, 1, -1, -1, 0, 1, -1, 0}이 하기와 같이 비트로 다시 변환될 수 있다.
터트 수 터트 값 x에 더해진 값 x의 새 값
0 0 0 0
1 0 0 0
2 -1 2 ×32= 18 0
3 -1 2 ×33= 54 18
4 -1 2 ×34= 162 72
5 1 35= 243 234
6 -1 2 ×36= 1458 477
7 -1 2 ×37= 4374 1935
8 0 0 6309
9 1 39= 19638 6309
10 -1 2 ×310= 118098 144090
11 0 0 144090
x는 19개의 유효비트(144090<219) 이상을 갖지 않으며 이진수로는 (0101101101001100010) 19 비트로 나타낸다. 이전 예에서 3진수로 변환된 19 비트와 동일하다.
9. 메시지 마커의 말단
이진수 메시지는 암호화를 위해 변환된다(§8을 참조). 이는 19 비트의 블록을 이용하여 수행된다. 명백히, 모든 메시지가 정확히 19 비트의 배수가 되는 길이를 가지지 않을 것이므로, 필요하다면, 마지막 19 비트 마지막 블록은 랜덤비트로 패딩될 것이다. 이들 랜덤비트는 원래 메시지의 일부가 아니며 복호화될 때 제거되어야만 한다. 그러므로 암호화된 메시지는 어떤 비트가 메시지의 부분인지 및 어떤 비트가 버려져야 하는지를 정확하게 결정하기에 충분한 정보를 포함해야 한다.
더욱이, 암호화 메커니즘은 N개의 계수를 가진 3진수 다항식에 대해 연산하는데, N은 키 크기(strength)에 의해 결정되는 정수 매개변수이다. 일단 3자리수로변환된 메시지는 정확한 수의 다항식들을 채우도록 기대할 수 없다. 결론적으로, 마지막 다항식은 랜덤 3자리수로 패딩되어야 하는 것이 또한 필요할 것이다. 메시지가 복호화될 때, 이들 터트를 무시하는 것이 가능해야만 한다.
메시지 마커의 말단이 메시지에 추가되어, 디코더(decoder)에게 원래 데이터가 종료되는 곳을 정확히 지시한다.
비트를 터트로 변환하기 위한 방법은 결코 {0,1,0,-1,1,0,-1,-1,1,-1,-1,-1}에서 {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}의 범위 내의 12 터플의 3자리수를 생성하지 않을 것이다. 이 범위내의 값은 메시지 마커의 말단으로 모두 사용된다.
전술한 바와 같이, 메시지의 마지막 블록은 필요하다면, 19 비트로 패딩되고, 그런 후 12 터트로 변환된다. 이 블록에 바로 뒤이어, 또 다른 12 터트 집합이 말단 마커로서 메시지에 추가된다. 말단 마커는 하기의 방식으로 계산된다:
1. B는 0-375의 범위내의 랜덤 정수라고 가정하고, A는 19 비트의 불완전 집합에서 마지막 메시지 비트의 수라고 가정한다.
2. A + 19×B + 219는 19 비트의 집합이 이전에 변환된 바와 같이 정확히 동일한 방식으로 12개 터트로 변환된다. 터트의 결과 집합은 {0, 1, 0, -1, 1, 0, -1, -1, 1, -1, -1, -1}에서 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}의 범위가 될 것이다. 이는 메시지 마커의 말단이다. 그런 후 다항식의 나머지는 랜덤 터트와 함께 채워진다.
결과가 메시지를 나타내는데 사용되는 가능한 스페이스 외부에 위치하는 시리즈의 터트이다면, 그리고 어느 것이 메시지의 마지막 비트인지를 메시지 마커의 말단으로부터 결정할 수 있다면, 다른 계산도 메시지 마커의 말단을 생성하는데 물론 사용될 수 있다. 이렇게 하기 위한 한가지 방법은 메시지의 마커 스페이스의 이용가능한 말단을 19개 부분들로 나누고, (예를 들면, 랜덤이거나 거의 랜덤으로) 적당한 부분에서 마커를 선택하여 마지막 19 비트 중 어느 것이 메시지의 실제 말단을 나타내는지를 지시하는 것이다.
메시지 블록의 패딩은 블록의 시작이나 끝에 있을 수 있으며; 메시지 마커의 말단은 결과 터트 블록의 앞 또는 끝에 추가될 수 있다. 블록내의 방향은 다소 임의적이며, 따라서 "뒤좇아지는(followed by)"과 같은 표현은 블록이 역으로 고려될 때 "앞의(in front of)"를 포함할 수 있다.
암호화 예
이 예를 위해, 마지막 블록이 도달될 때 암호화하기 위해 원래 메시지의 4 비트만이 남겨져 있다고 가정하자. 이 상황에서, 15 랜덤비트가 선택되고 4 메시지 비트에 접합된다. 환언하면, 이러한 19 블록의 0번째, 첫 번째, 두 번째 및 세 번째 비트는 원래 메시지에 속하고, 네 번째,...,열여덟 번째 비트는 단지 랜덤 패딩(random padding)이다. 세 번째 비트가 원래 데이터에 속하는 마지막 비트이므로, 따라서 A는 3이 되도록 설정된다. 그런 후 이 19 비트의 패딩된 집합은 정상적으로 터트로 변환된다.
이런 후, 메시지 마커의 말단이 선택된다. 먼저 랜덤 B가 0-375 범위에서 선택된다. 이 예를 위해, B는 122의 값을 가지도록 주어진다. 그런 후 하기의 계산이수행된다:
A + 19 ×B + 219= 3 + 19 ×122 + 219= 526609
이러한 정수의 터트로의 변환은 {1, 0, 0, 1, 0, 1, -1, 0, -1, -1, -1, -1}을 산출한다.
12 터플{1, 0, 0, 1, 0, 1, -1, 0, -1, -1, -1, -1} 전반에서 모든 4개의 리딩 터트(leading terts)(오른쪽)가 -1로 설정된 반면에, 상기 12 터플 후반에서 4번째 터트가 1인 사실로부터 명확히 알 수 있는 바와 같이, {1, 0, 0, 1, 0, 1, -1, 0, -1, -1, -1, -1}이 {0, 1, 0, -1, 1, 0, -1, -1, 1, -1, -1, -1}보다 큼을 주목하라. {1, 0, 0, 1, 0, 1, -1, 0, -1, -1, -1, -1}는 필요한 말단 마커이다.
메시지가 복호화될 때, 차례로 12 터트의 각 집합은 19 비트로 다시 변환된다. 만일 정상적으로 연산된다면, 복호화 프로세스는 결국 19 비트로 다시 변환하기 위한 범위에서 벗어난 12 터트의 블록에 마주치게 될 것이다. 환언하면, 이진수로의 재변환을 통해 얻어진 정수는 19 유효비트 이상을 갖는다(§8 참조).
이 정수는 메시지 마커의 말단이다. 이 메시지 마커의 말단을 이진수로 다시 변환한 후, 그것에서 219를 뺀다. 그 결과는 19로 나누어지고 나머지가 취해진다. 이는 A로 복귀된다. 말단 마커의 바로 앞에 있는 블록의 19 비트 중에서, 0번째부터 시작하고 A번째 비트를 포함하는 비트의 시퀀스가 원래 메시지 비트로서 취해진다. 남아있는 비트는 랜덤 패딩이며, 상기 랜덤 패딩은 어떤 남아있는 터트와 함께 버려질 수 있다.
복호화 예
이 예를 위해, 이전 예에서 계산된 12 터트의 블록{1, 0, 0, 1, 0, 1, -1, 0, -1, -1, -1, -1}이 복호화 프로세스동안 수신되었다고 가정하자. 이들 12개 터트가 이진수로 재변환될 때, 값 526609가 산출된다. 이는 적어도 219만큼 크다(또는 환언하면 이진수 표현에서 19개 이상의 유효비트를 가진다). 219을 빼고 19로 나눈 나머지를 취함으로써 값 3이 산출된다. 그러므로 이전 19 비트의 블록의 0번째, 첫 번째, 두 번째 및 세 번째 비트는 유효한 메시지 비트이라고 결론이 난다. 그런 후 다른 15비트가 버려질 수 있다.
물론 메시지 전송을 위한 사용되지 않은 스페이스 내부로부터 메시지 마커의 말단을 사용하는 것은 전술한 비트-대-터트(bit-to-tert) 예에 제한되지 않고, 또는 물론 12터트로 변환되는 19 비트의 특정예에 제한되지 않음을 알게 될 것이다. 일부 적합한 엑세스할 수 없는 스페이스가 있다면, 모듈러스(modulus)의 변환을 포함한 다른 변환이 사용될 수 있다.
10. 의사 랜덤 숫자(난수) 발생기(Pseudo Random Number Generator)
텀블러는 2개의 의사 랜덤 숫자 발생 알고리즘들(두 번째 것만이 예측가능한 것으로 출원인은 생각한다)을 제공한다. 양 알고리즘은 SHA-1을 이용하여 입력 시드(input seed)에 기초한 예측불가능하고 랜덤하게 분포된 비트 스트림을 생성한다.
모든 의사 랜덤 숫자 발생기(PRNGs)는 본질적으로 결정적(deterministic)이며, 생성되는 출력은 시드(seed)만큼이나 예측 불가능할 것이다라는 것을 기억하는 것이 중요하다.
첫 번째 텀블러 알고리즘인, TSR(Tao SHA-1 Random)은 상업적으로 이용가능한 많은 다른 해시 기반의 암호 PRNGs와 유사한 방식으로 연산한다. RSA와 Yarrow에 의해 제공된 카운터페인(Counterpane)의 SHA1 Random 및 MD5 Random이 이러한 카테고리에 속한다. 초기 입력이 해시되고, 이 해시 출력은 카운터로 반복적으로 재해시되어 랜덤비트 스트림을 생성한다. 임의의 단계에서 더 입력을 추가하는 것이 가능하며, 이러한 추가 입력은 현재상태와 함께 해시된다.
도 9는 어떻게 이러한 일반적인 PRNG가 연산되는지에 대한 단순화된 형태를 도시하고 있다.
901. PRNG를 '시드(seed)'하는 것, 환언하면 모든 연속출력이 기초로 하는 초기상태를 PRNG에 제공하는 것은 필수적이다. 비록 왜곡될 수 있고 그래서 의사 랜덤 데이터로써 이용불가능하게 될 수 있지만, 완전히 예측불가능한 데이터를 입력하는 것은 이를 달성한다. 이러한 데이터는 대개 키스트로크(keystrokes)의 타이밍(timing) 또는 마우스 이동 타이밍과 같은 실제 세상의 사건을 측정함으로써 얻어진다. 이러한 데이터를 엔트로피(entropy)라고 한다.
902. 해시함수는 임의의 많은 양의 엔트로피를 함께 해시하기 위해 사용된다. 이것은 이러한 엔트로피에 기초하는, 정의된 크기의, 내부상태를 제공한다. 엔트로피의 예측불가능성은 내부상태의 크기와 동일하지 않을 수 있다. 10비트의 엔트로피는 16가지 가능한 집단의 값들만을 가질 수 있으며 이에 따라 4비트의 예측불가능성을 가질 것이다. 이러한 해시 단계를 이용하여 충분한 예측불가능성을 보장하기에 충분한 엔트로피를 입력할 수 있다.
903. 904 내에서의 카운터의 값과 함께 902로부터의 출력은 PRNG의 내부상태를 형성한다.
904. 내부 카운터는 출력의 각 블록을 가변하기 위해 사용된다. 카운터는 각 랜덤 출력의 블록과 함께 변한다. 각 출력 블록은 카운터에 기초하므로 이는 다른 출력의 생성을 초래한다.
905. 또 다른 해시 경우는 제 1 해시(903)의 결과와 카운터(904)를 조합한다. 이러한 해시는 새로운 랜덤 데이터의 블록이 필요할 때마다 다시 사용된다.
906. 905에서의 해시 결과는 의사 랜덤 데이터이다. 응용에 따라 해시 결과는 의사 랜덤 비트의 스트링(string)이 될 수 있다(그러나, 될 필요는 없다).
TSR의 간략한 설명은 다음과 같다:
H()를 해시함수로; X∥Y는 X와 Y의 접합으로; C는 정수 카운터로; Ei는 난수 발생기에 더해지는 i번째 엔트로피 풀(pool)로; Pij는 E의 입력으로 인해 생성된 랜덤 데이터의 j번째 106비트 풀로; 및 Si는 Pij를 생성하는 160비트 내부상태로 정의한다.
- 알고리즘이 먼저 초기화되면, 카운터 C, i 및 j가 0으로 설정되고 상태,S00,는 모두 설정되지 않은 160비트를 가진다.
- 현재 상태는 S(i-1)로 가정할 때, 엔트로피의 i번째 풀이 PRNG에 입력되면 새로운 상태 Si는 H(S(i-1)∥Ei)가 된다.
- 더 많은 데이터가 필요할 때, 카운터(C)가 하나씩 증가되고 새로운 풀 Pij은 H(Si∥C)가 된다.
이 방법은 엔트로피 입력으로부터 정해지지 않은 암호 비트 스트림을 생성하기 위한 보안 메커니즘 역할을 한다. 그러나, 이 방법은 내부상태가 하나의 해시 출력의 크기만을 가지게 하는 불이익을 갖는다. SHA-1은 160비트로, 현재 일반적으로 지원되는 해시 알고리즘의 가장 큰 자리수 크기를 가진다. 이는 엔트로피 입력 양에 무관하게, 입력 연산 사이에 생성된 2160이상의 다른 비트 스트림이 될 수 없다는 것을 의미한다.
현대 암호학에서, 종종 (개인키와 같은) 객체는 매우 큰 스페이스 중에서 랜덤하게 선택되는 것이 바람직하다. 예를 들면, N=503에 대해, 2720의 가능한 NTRU PKCS 개인키가 있다. 만일 단지 하나의 시딩(seeding) 연산만으로, 2160의 내부상태를 갖는 PRNG를 사용한다면, 적어도 2520의 가능한 키는 결코 선택될 수 없다.
객체의 생성동안 시딩 연산을 수행하는 것이 항상 대수로운 일인 것은 아니다. 시딩 연산은 엔트로피를 필요로 하고, 엔트로피는 실제 세계를 측정함으로써 얻어진다. 그러므로 암호가 사용되는 플랫폼이 어떻게 실제 세계와 상호 작용하는지를 정확하게 아는 것이 필수적이다.
플랫폼 독립적인 방식으로 충분한 랜덤 데이터를 달성하는 문제를 위한 2가지 해결방안을 제안한다.
첫째는 자체 재시딩(re-seeding) PRNG이다. 이 방법은 설명하기가 꽤 간단하나, 그것이 사용되는 시스템 상에 여분의 필요조건을 두며 이러한 것은 단지 반 플랫폼 독립적(semiplatform independent)이다.
PRNG의 기본적인 내부 메커니즘은 변경되지 않은 채 있게 된다. PRNG가 연산하도록 기대되는 각 플랫폼을 위해, PRNG에 의해 호출되고 PRNG에 엔트로피를 제공할 함수가 존재한다.
PRNG는 평균적으로 랜덤 데이터를 생성하지만, 생성된 데이터의 양을 기록한다. 이는 PRNG의 내부상태 뿐만 아니라 마지막 제공되었던 엔트로피의 예측불가능성과 비교된다. PRNG가 내부상태와 엔트로피의 예측불가능성에서 더 작은 정도의 데이터를 생성한다면, 이것은 플랫폼 특정함수를 호출하여 더 많은 엔트로피를 요구한다.
두번째 해결방안은 더욱 복잡하지만, 완전히 플랫폼 독립적인 잇점을 가진다.
기본원리는 매우 큰 내부상태를 갖는 PRNG의 이용을 포함한다. 이러한 PRNG를 생성하는데 있어 문제는 보안 해시가 필요한 내부 상태보다 훨씬 더 작은 유한 출력을 가질 때 암호적으로 보안하는데 있다.
큰 상태 PRNG의 텀블러 구현은 TRS-LS(Tap SHA-1 Random-Large State)알고리즘(상기 언급한 2개 텀블러 알고리즘 중 두 번째)이다. TRS-LS는 다중 동시 해시함수를 사용하고, 각 새로운 생성연산과 함께 원래 시드(seed)를 재해시한다. 이는 2048비트의 내부상태를 제공하므로, 2개의 입력 연산사이에 생성될 수 있는 22048개의 다른 비트 스트림이 있다. TSR-LS는 TSR보다는 느리지만, 동적 재시딩 PRNG 만큼은 느리지 않다. 동적 재시딩 PRNG에 대한 TSR-LS의 또 다른 잇점은 ,동적 재시딩 PRNG가 데이터 조각을 이용한다는 것이며 그러므로 초기 출력은 일부 시드에 종속적이지 않게 된다. TRS-LS로, 모든 출력은 모든 시드에 종속적이며; 2048비트 상태에서의 다른 차이로 인해 출력의 매 비트를 변경하는 가능성을 가진다.
TRS-LS는 다중층의 해시함수 시스템을 이용한다. 단순화된 형태가 도 10에 도시되어 있다. 해시 함수는 소프트웨어로 구현될 수 있거나, 다른 방안으로는, 하드웨어 해시장치를 구비할 수 있다.
1001. 엔트로피는 제 1 층에서 각 해시함수 사이에 균일하게 분배된다. 해시함수의 수는 필요한 내부 상태의 크기에 따른다. 시딩 프로세스는 사용하는 해시함수가 더 많을수록 더 느리게되나, 진행 중에 연산 횟수는 해시의 수에 무관하다.
1002. 우선 첫째로, 제 1 층에서의 각 해시함수는 수신하는 엔트로피를 해시한다.
1004. 제 2 층의 해시는 제 1 층에서의 모든 해시 (1002)로부터 출력을 받아들이고, 함께 이 모든 것을 해시한다. 이는 마지막 출력의 각 비트가 초기 시드의 각 비트에 기초함을 보장한다.
1005. 제 2 층 해시(1004)로부터의 출력은 PRNG를 위한 의사 랜덤 출력을 형성한다.
PRNG를 이용하는 애플리케이션으로부터, 더 많은 데이터가 요청될 때마다, (순환 방식에 대한) 해시함수(1002)중 하나는 카운터(1003)를 이용하여 재해시 연산을 수행한다. 이러한 재해시 연산은 전술한 정상상태 PRNG에 의해 사용된 연산과 동일할 수 있다.
1003. 이 카운터는 각 해시함수가 매 번의 재해시 연산으로 새 출력을 생성하도록 보장하는데 사용된다. 여기서 및 하기 예에서, 초기출력은 카운터 증가로서 사용된다. 각 해시함수(1002)는 자신의 카운터(1003)를 유지할 수도 있다.
그런 후 특별한 재해시 함수의 재해시된 출력이 제 2 층 함수(1004)로 이송되며, 제 2 층 함수는 다른 함수(1002)로부터 이전에 수신한 출력과 함께 재해시된 출력을 해시하여, 필요한 새로운 출력 데이터(1005)를 생성한다. 이런 방식으로, 단지 하나의 함수(1002)가 새로운 데이터에 대한 요청이 있을 때 제 2 층 함수(1004)에 대해 데이터를 재해시하고 패스할 필요가 있다.
해시함수(1002)는 필요로서 및 필요할 때 풀(1001)로부터 추가 엔트로피를 얻는다. 다른 방안으로는, 추가 엔트로피는 한번에 모든 함수(1002)에 대해 일괄적으로 제공될 수 있다.
TSR-LS의 정확한 설명이 하기에 나타나 있다:
TSR-LS는 SHA-1 해시 객체의 5개의 동시발생 인스턴스를 이용한다. H(),H0(), H1(), H2(), H3()가 이들 해시함수로; X∥Y는 상기 TRS에 대한 것처럼; C0, C1, C2및 C3는 4개의 160비트 카운터로; I0, I1, I2및 I3는 4개의 160비트 증가분으로; Ei는 난수 발생기에 추가되는 i번째의 엔트로피 풀으로; Ei0, Ei1, Ei2및 Ei3는 각 엔트로피 풀(Ei)에 대해 4개의 엔트로피 서브풀로; Pij는 Ei의 입력으로 인해 생성된 랜덤 데이터의 j번째 106비트 풀로; Sk는 생성된 k번째 160비트의 중간상태로 정의된다.
- 알고리즘이 먼저 초기화될 때, C0, C1, C2, C3, I0, I1, I2및 I3가 모두 i=0 및 k=-1인 정해지지 않은 160비트를 가진다,
- 엔트로피의 i번째 풀이 PRNG에 입력될 때, n번째 바이트가 엔트로피 서브풀(Eia)에 위치하도록 엔트로피 풀(Ei)이 나누어지며, 여기서 바이트가 4의 마지막 불완전 집합의 부분이 아니라면 a는 n 모듈로 4의 가장 낮은 양의 나머지이다. 이 경우에, n번째 비트가 엔트로피 서브풀(Eia)에 포함되도록 이러한 마지막 바이트들 집합의 비트들은 나누어지는데, 여기서 a는 n 모듈로 4의 가장 낮은 양의 나머지이다. 생성된 마지막 내부상태 블록은 Sk로 정의된다. 각 해시함수 Ha()을 위해, 엔트로피의 서브풀은 해시로 들어간 모든 이전의 데이터와 접합된다. 이러한 접합을 위한 자리수가 계산되고 그 결과가 Sk+a+1에 위치된다.
- 더 많은 데이터가 요구될 때, a는 j 모듈로 4의 최소의 양의 나머지가 되도록 취해져야 한다. Ca는 이 값 모듈로 2160을 더함으로써 증가분(Ia)만큼 증가된다. 다음, 이러한 값은 Ha()에 의해 이전에 해시되었던 입력에 접합되고, 그 결과가 계산된다. 생성된 마지막 내부상태 블록은 Sk였음을 가정해야 한다. 이 경우, 이 해시의 결과가 Sk+1에 위치되며, 새로운 풀 Pij은 H(S0∥S1∥...∥Sk+1)이 된다.
11. 시퀀스 발생기
시퀀스 발생기는 전술한 바와 같이 MTA 보호 해시(protection hash)를 위해 사용된다. 이 발생기의 목적은, 입력 시드(input seed)가 알려져 있고 스트림이 결정적(deterministic)이어야 함을 제외하고는, PRNG와 유사한 방식으로 의사 랜덤비트의 정해지지 않은 스트림을 제공하는 것이다. 임의로 선택된 시퀀스를 생성할 입력 시드를 찾거나, 출력의 일부로부터 입력을 계산하는 것은 아직 계산적으로 용이하지 않음이 틀림없다.
PRNGs가 결정적이므로, 시퀀스 발생기는 특정 PRNG에 알려진 시드를 제공함으로써 달성될 수 있다. 텀블러에서, (비록 PRNG가 사용될 수도 있지만) PRNG와는 약간 다르게 연산하는 간단한 시퀀스 발생기가 제공된다.
초기 시드는 SHA-1의 인스턴스를 사용하여 해시되고, 이러한 해시출력은 자체적으로 이용가능한 시퀀스 데이터의 처음 20바이트로서 사용된다. 그런 후, 해시 입력을 이전 출력블록과 접합하고 해시를 재계산함으로써 새로운 시퀀스 데이터가 제공된다.
12. 벡터표현에 대한 병렬비트 연산의 이용을 통한 효율적 모듈로 산술
텀블러는 비트 기반의 기술을 이용한 작은 모듈러스들(moduli)에서 모듈로 산술을 수행하는 새로운 방법을 이용한다.
이 방법은 효율적으로 모듈로 산술을 수행하기 위해 비트(즉 이진수) 기반의 장치를 이용할 수 있도록 한다. 이는 비트방식 논리연산의 간단한 시퀀스를 이용하여 벡터형태로 숫자들을 저장하고 병렬로 다수의 숫자들에 대한 산술연산을 수행함으로써 달성된다. 이를 이용하여 어떤 베이스(base)에서도 효율적인 모듈로 산술을 수행할 수 있다. 그러나, 효율성은 작은 베이스에서 가장 크다. 텀블러는 이 방법을 PKCS 3진수 연산을 수행하기 위해 이용한다.
12.1 모듈로 산술의 더 상세한 설명
일부 양의 정수 베이스 r을 위한 산술 모듈로 r은 정수의 r '나머지 클래스들(remainder classes)' 사이의 연산에 관한 것이다. '나머지 클래스'는 r로 나누어질 때 공통 나머지를 공유하는 정수로 이루어진다.
예를 들면, 모듈로 7에서, 64와 15 둘 다는 동일한 나머지 클래스에 속한다:
64 = 9 ×7 + 1, 15 = 2 ×7 + 1.
두 정수의 합 또는 곱을 어떤 주어진 정수로 나눈 나머지는 각각의 가수(addends)나 인수를 같은 정수로 나눈 나머지에만 의존한다. 그러므로, 나머지 클래스 사이의 연산을 고려할 수 있다.
나머지 클래스 사이의 더하기, 빼기 및 곱하기는 나머지 클래스로부터 임의로 선택한 대표들 사이의 정상적인 정수 산술에 대한 것과 같은 방식으로 동작한다. 대개 전자(the former)는 각각의 나머지 클래스로부터 하나의 대표 집합 선택을 포함한다. 이들은 일반적으로 가장 작은 양의 값을 가진 집합(즉 {0, 1, ... , r-1})이거나 가장 낮은 절대값을 가진 집합(즉 {[-r/2]+1 , ... , 0, ... [r/2]})일 것이다.
모듈로 산술은 이론적으로 일반화된 정수산술보다 더 간단하다. 그러나, 근래의 디지털 장치는 일반화된 정수 산술에 대처하도록 만들어져서, 모듈로 산술을 수행하는데 있어서는 매우 비효율적이다.
12.2 장치 가정
이하에 n비트 워드를 이용하고 하기의 비트방식의 논리연산을 수행할 수 있는 장치가 있다고 가정하고 있다.
·이진수 연산 배타논리합(XOR)은 양 입력워드의 대응하는 비트가 둘 다 설정(set)되지 않거나 둘 다 공백(clear)이지 않을 때만 워드의 각 비트가 설정되게 워드를 복원하도록 정의된다.
·이진수 연산 AND는 양 입력워드의 대응하는 비트가 둘 다 설정될 때만 워드의 각 비트가 설정되게 워드를 복원하도록 정의된다.
·이진수 연산 OR은 입력 워드의 한 쪽 또는 둘 다의 대응하는 비트가 설정될 때만 워드의 각 비트가 설정되게 워드를 복원하도록 정의된다.
·단일 연산 NOT는 입력워드의 대응하는 비트가 공백일 때만 각 비트가 설정되게 워드를 복원하도록 정의된다.
12.3 벡터 표현
본 명세서에 기술된 방법의 핵심은 숫자의 벡터 비트방식의 표현에 있다.
디지털 장치는 일반적으로 한 워드의 인접한 비트들 내에서 이진수 형태의 정수를 저장한다. 이는 비트들 간의 자리올림(carry)을 허용하는 '반 가산기(half adders)'와 같은 회로를 이용할 수 있도록 한다. 벡터 표현으로, 어떤 수의 값은 다른 워드들 내에서 대응하는 자리에 위치하는 비트들로 표현된다. 이들 비트들의 값은 이진수 형태의 숫자에 관련될 필요는 없다. 다음 예에서 3진수로 예시한 바와 같이, 새로운 방식으로 비트들을 해석하는 것은 훨씬 큰 효율성뿐만 아니라 다른 부수적인 이점을 초래할 수 있다.
2개의 정수 사이의 단일 모듈로 산술연산을 수행하는 것은 정규의 정수방법을 이용하는 것보다 상당히 덜 효율적인 벡터표현을 이용하는 것이다. 이는 숫자를 나타내는 2×[log2r] 워드들을 결합하는 것이 일반적으로 O(log3r) 연산들을 포함하기 때문이다.
그러나, 본 출원인은 벡터 표현의 이점은 그것의 불확정적인 병렬가능성 (indefinite parallelisability)에 있다는 것을 인지하였다. 동시에 수행될 수 있는 동일한 연산의 갯수는 워드의 크기에 의해서만 제한된다.
12.4 3진 표현
이제부터 터트(3진수 표현)의 3개의 가능한 값이 0, 1 및 -1이라고 가정한다. 이는 임의의 결정이며 시스템은 3개 터트의 명칭에 무관하게 적용된다.
터트는 2개의 별도의 워드에서 대응 위치에 차지하고 있는 2개의 비트로 표현된다. 제 1 워드에 위치한 비트는 터트의 값이 0이 아닐 때만 설정(set)된다. 제 2 워드에 위치한 비트는 터트의 값이 1일 때만 설정된다. 그러므로 3개 터트 0, 1 및 -1이 벡터<0,0>, <1,1> 및 <1,0>으로 각각 표현된다. 이런 방식으로 n개 터트가 2개의 n비트 워드로 표현될 수 있다.
4개의 터트 0,0,-1 및 1의 벡터 비트방식의 표현을 사용하고자 한다고 가정하자. 상기 특정 벡터의 이용하는 것은 하기의 표를 제공한다:
터트 벡터 첫번째 1비트 벡터 두번째 2 비트
0 0 0
0 0 0
-1 1 0
1 1 1
이제, 첫 번째 비트와 두 번째 비트를 분리하여 취하고 저장함으로써 이러한 정보를 2개의 분리된 4비트 워드, 즉 (첫 번째 비트를 나타내는) 0011과 (두 번째 비트를 나타내는) 0001처럼 다룰 수 있게 한다. 그 다음, 예를 들면, XOR, AND, OR 및 NOT를 이용하여, 개별 터트나 벡터에 대한 것이 아니라 워드 자체에 대한 모듈로 산술을 실행할 수 있다. 이것은 넘침(overflows)이나 자리올림(carries)을 다루지 않아도 되도록 하지만, 많은 터트가 동시에 동작된다.
모듈로 산술을 수행하는 효율적인 방법을 제안하는 것과는 별도로, 이러한 비트의 해석은 제 1 배열을 단순히 조사함으로써 터트 모듈로 2의 값을 결정할 수 있도록 한다. 알고리즘은 종종 0인 터트와 0이 아닌 터트를 구별하는 것과 관련되므로 이는 보통의 이진수 형태에 대해 큰 잇점을 가진다.
한 쌍의 대응하는 비트가 있고 첫 번째 워드에 위치한 비트가 공백(clear)인 곳에, 두 번째에 위치한 비트는 결코 설정(set)되지 않는다. 그러나, 시스템은 이것에 의존할 필요가 없다.
물론 유사한 원리가, 예를 들면 3개의 별도의 워드들에 대해 연산하는 베이스 5의 산술을 수행하기 위해, 3 이외의 베이스에 대한 모듈로 산술에 적용될 수 있는데, 첫 번째는 벡터표현에서 모든 첫 번째 비트를 나타내고, 두 번째는 모든 두 번째 비트를 나타내며, 세 번째는 모든 세 번째 비트를 나타낸다. 이러한 접근은 더 큰 베이스에 대해서도 또한 적용된다.
12.5 모듈로 3의 산술
모듈로 3의 산술이 하기의 방식으로 수행된다.
X∼0및 X1은 n개의 터트 x0,...,xn-1를 나타내는 2개의 n비트 워드인데, 여기서 워드 X∼0은 대응 터트가 0이 아니면 설정되는 비트를 포함하고 워드 X1은 대응 터트가 1이면 설정되는 비트를 포함한다. 유사하게 Y∼0및 Y1은 n개의 터트 y0,...,yn-1를 나타내는 2개의 n비트 워드이다.
x0+ yo(mod3),...,xn-1+ yn-1(mod3) 터트를 나타내는 Z∼0및 Z1을 생성하기 위해, i=0 에서 (n-1)까지, 각각 모듈로 3의, n 쌍의 터트(xi,yi)를 더하는 단계의 결과는 다음과 같이 계산될 수 있다:
Z1= (X∼0XOR Y1) AND (X1XOR Y∼0),
Z∼0= (X∼0XOR Y∼0) OR (X1AND Y1) OR Z1.
x0- yo(mod3),...,xn-1- yn-1(mod3) 터트를 나타내는 Z∼0및 Z1을 생성하기 위해, i=0 에서 (n-1)까지, 각각 모듈로 3의, xi로부터 yi값을 빼는 단계의 결과는 다음과 같이 계산될 수 있다:
Z∼0= (X∼0XOR Y∼0) OR (X1XOR Y1),
Z1= (Y∼0XOR X1) AND ((NOT Y1) OR X∼0) AND Z∼0.
x0×yo(mod3),...,xn-1×yn-1(mod3) 터트를 나타내는 Z∼0및 Z1을 생성하기 위해, i=0 에서 (n-1)까지, 각각 모듈로 3의, n쌍의 터트(xi,yi)를 곱하는 단계의 결과가 다음과 같이 계산될 수 있다:
Z∼0= (X∼0AND Y∼0),
Z1= (NOT (X1XOR Y1)) AND Z∼0.
필드 F3에서, 단지 2개의 영이 아닌 엘리먼트 1 및 -1이 둘 다 자체 전환된다. 그러므로 나누기가 곱셈과 구별불가능하게 된다.
12.6 하드웨어 및 소프트웨어
이 방법은 도 11, 도 12 및 도 13에 도시된 원형 다이어그램에 의해 예시한 바와 같이 하드웨어에서 구현하기 쉽다. 도 11은 모듈로 3의 덧셈에 대한 원형 다이어그램을 도시하고, 도 12는 모듈로 3의 뺄셈에 대한 원형 다이어그램을 도시하며 도 13은 모듈로 3의 곱셈에 대한 원형 다이어그램을 도시하고 있다.
소프트웨어에서, 이러한 방법은 증감 가능한 병렬화(scalable parallelisation)를 허용한다. 왜냐하면, 어떤 길이를 가진 워드의 전체 폭을 이용할 수 있기 때문이다.
12.7 텀블러에서의 사용
텀블러 PKCS는 모듈로 3의 다항식을 이용하는데, 상기 모듈로 3의 다항식은 다항식의 계수 모두가 단지 유효(significant) 모듈로 3인 값을 가지는 다항식이다. 상기 알고리즘의 다양한 단계에서 이들 다항식을 서로 더하고 빼는 것이 필요하다. 특별히, 키 생성 시스템을 현재 구현하기 위해 모듈로 3의 다항식에 대해 수행되는 '올모스트 인버스 알고리즘(Almost Inverse Algorithm)'을 이용하거나(§3를 참조) 다른 방안으로서 유클리드 알고리즘을 이용한다. 이들 알고리즘은 차례로 다항식의 덧셈과 뺄셈을 필요로 한다. 복호화 시스템은 2개의 모듈로 3 다항식의 컨벌루션 프로덕트(스타 곱셈)를 필요로 한다. 스타 곱셈 알고리즘은 또한 다항식의 덧셈과 뺄셈을 이용한다.
2개 다항식을 더하기 위해, 각각의 다항식으로부터 대응 계수의 값을 함께 더한다. 제 1 다항식으로부터의 제 1 계수의 값이 제 2 다항식의 제 1 계수의 값에 더해져서 합의 제 1 계수의 값을 생성하고, 이하 동일한 방식으로 반복한다.
제 1 다항식이 전술한 바와 같이 2개의 비트 배열 X1및 X∼0으로 표현되고, 제 2 다항식이 2개의 비트 배열 Y1및 Y∼0으로 표현되면, 상기 2개의 다항식의 다항식 합은 하기의 4 배열에 대한 모듈로 3의 덧셈 연산을 수행함으로써 계산될 수 있다.
Z1= (X∼0XOR Y1) AND (X1XOR Y∼0),
Z∼0= (X∼0XOR Y∼0) OR (X1AND Y1) OR Z1.
뺄셈에 대해서도 동일하다. 2개 비트 배열로서 각 다항식을 저장함으로써 상기 뺄셈 방법은 2개 다항식의 차이를 계산하는데 사용될 수 있도록 한다.
텀블러에서 각 다항식은 503 계수만큼 많이 가질 수 있으므로, 이런 방법은 속도 면에서 상당한 증가를 산출한다.
모듈러(modular) 산술에 대한 이러한 접근법은 일반적으로 디지털 데이터 처리 분야에서 응용을 찾을 수 있으며, 암호 시스템내의 사용에 제한되지 않는다.
상기 내용에 포함되어 있음

Claims (10)

  1. (a) 메시지를 메시지 다항식으로 나타내는 단계,
    (b) 암호 다항식을 형성하기 위해 메시지 다항식을 암호화하는 단계,
    (c) 해시(hash) 출력을 만들기 위해, 메시지 다항식 및 암호 다항식을 나타내는 입력들을 함께 해시하는 단계 및
    (d) 암호 다항식에 의해 정의된 암호화된 메시지 및 해시 출력을 기초로 하는 체크 정보 모두를 수신자에게 송신하는 단계를 포함하는
    암호화된 메시지를 타당성 검사하는 방법.
  2. 제 1 항에 있어서,
    입력들은 해시되기 전에 접합되는 암호화된 메시지를 타당성 검사하는 방법.
  3. 제 1 항에 있어서,
    메시지 다항식 입력은 바이트들을 채우기 위해 팩(pack)되는 다항식 계수들을 나타내는 비트들을 포함하는 암호화된 메시지를 타당성 검사하는 방법.
  4. 제 1 항에 있어서,
    암호 다항식 입력은 바이트들을 채우기 위해 팩(pack)되는 다항식 계수들을 나타내는 비트들을 포함하는 암호화된 메시지를 타당성 검사하는 방법.
  5. 제 1 항 내지 제 4 항 중 어느 한 항에 있어서,
    해시는 SHA-1 알고리즘을 사용하여 수행되는 암호화된 메시지를 타당성 검사하는 방법.
  6. 제 1 항 내지 제 5 항 중 어느 한 항에 있어서,
    체크 정보에서 얻은 기대 해시 출력을 수신된 암호 다항식과 복호화된 메시지 다항식을 기초로 재계산된 해시 출력과 비교함으로써 송신된 부호화된 메시지의 타당성을 확인하는 단계를 포함하는 암호화된 메시지를 타당성 검사하는 방법.
  7. 제 1 항 내지 제 6 항 중 어느 한 항에서 청구된 방법을 수행하기 위한 컴퓨터 프로그램.
  8. 제 7 항에서 청구된 컴퓨터 프로그램을 운반하는 물리적 캐리어(phisical carrier).
  9. 제 7 항에서 청구된 컴퓨터 프로그램을 나타내는 데이터스트림.
  10. (a) 암호 텍스트를 형성하기 위해 메시지 텍스트를 암호화하는 단계,
    (b) 해시 출력을 만들기 위해 메시지 텍스트와 암호 텍스트를 나타내는 입력들을 함께 해시하는 단계,
    (c) 암호 텍스트에 의해 정의된 암호화된 메시지 및 해시 출력을 기초로 하는 체크 정보 모두를 수신자에게 송신하는 단계를 포함하는
    암호화된 메시지를 타당성 검사하는 방법.
KR1020027016463A 2000-06-01 2001-05-24 암호화된 메시지의 타당성 검사를 하는 방법 KR20030019411A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0013356.1 2000-06-01
GBGB0013356.1A GB0013356D0 (en) 2000-06-01 2000-06-01 A method of validating an encrypted message

Publications (1)

Publication Number Publication Date
KR20030019411A true KR20030019411A (ko) 2003-03-06

Family

ID=9892807

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020027016463A KR20030019411A (ko) 2000-06-01 2001-05-24 암호화된 메시지의 타당성 검사를 하는 방법

Country Status (10)

Country Link
US (1) US20040103286A1 (ko)
EP (1) EP1287641B1 (ko)
JP (1) JP2003535500A (ko)
KR (1) KR20030019411A (ko)
AT (1) ATE343272T1 (ko)
AU (1) AU2001258646A1 (ko)
CA (1) CA2410608A1 (ko)
DE (1) DE60123949D1 (ko)
GB (1) GB0013356D0 (ko)
WO (1) WO2001093497A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7292552B2 (en) * 2002-03-14 2007-11-06 Qualcomm Incorporated Method and apparatus for reducing interference in a wireless communication system
KR20040009766A (ko) * 2002-07-25 2004-01-31 학교법인 성균관대학 암호 시스템에서 송수신 장치 및 방법
US7200758B2 (en) * 2002-10-09 2007-04-03 Intel Corporation Encapsulation of a TCPA trusted platform module functionality within a server management coprocessor subsystem
US8689000B2 (en) 2003-05-21 2014-04-01 Hewlett-Packard Development Company, L.P. Use of certified secrets in communication
US7627764B2 (en) * 2004-06-25 2009-12-01 Intel Corporation Apparatus and method for performing MD5 digesting
CA2769682C (en) * 2008-08-01 2015-03-03 Nikolajs Volkovs System and method for the calculation of a polynomial-based hash function and the erindale-plus hashing algorithm
US9201629B2 (en) 2013-03-14 2015-12-01 International Business Machines Corporation Instruction for performing a pseudorandom number seed operation
US8873750B2 (en) * 2013-03-14 2014-10-28 International Business Machines Corporation Instruction for performing a pseudorandom number generate operation
US11487885B2 (en) * 2018-01-31 2022-11-01 Salesforce, Inc. Enabling and validating data encryption
US11070362B2 (en) 2018-02-12 2021-07-20 Massachusetts Institute Of Technology Systems and methods for providing secure communications using a protocol engine
US11416638B2 (en) 2019-02-19 2022-08-16 Massachusetts Institute Of Technology Configurable lattice cryptography processor for the quantum-secure internet of things and related techniques
WO2022266502A1 (en) * 2021-06-19 2022-12-22 Ntt Research, Inc. Broadcast encryption with improved resource utilization

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4068664B2 (ja) * 1996-08-19 2008-03-26 エヌティーアールユー クリプトシステムズ,インコーポレーテッド 公開鍵暗号システム方法および装置

Also Published As

Publication number Publication date
EP1287641B1 (en) 2006-10-18
CA2410608A1 (en) 2001-12-06
JP2003535500A (ja) 2003-11-25
AU2001258646A1 (en) 2001-12-11
EP1287641A1 (en) 2003-03-05
GB0013356D0 (en) 2000-07-26
DE60123949D1 (de) 2006-11-30
ATE343272T1 (de) 2006-11-15
US20040103286A1 (en) 2004-05-27
WO2001093497A1 (en) 2001-12-06

Similar Documents

Publication Publication Date Title
KR20030027896A (ko) 의사 난수 발생기
KR101246437B1 (ko) 유한체 연산을 사용하는 랜덤 번호 발생기를 포함하는 암호 시스템
KR20030027895A (ko) 비트 방식의 논리 연산을 이용한 병렬 모듈로 산술
KR20030019412A (ko) 다중 송신 공격으로부터 암호 시스템을 보호하는 방법
JP2004363739A (ja) 改竄検知可能な、共通鍵暗号の暗号化装置または復号化装置
KR20030019411A (ko) 암호화된 메시지의 타당성 검사를 하는 방법
US20220198048A1 (en) Search and access pattern hiding verifiable searchable encryption for distributed settings with malicious servers
KR20030028747A (ko) 암호 다항식의 복호화
KR20030031491A (ko) 메시지 마커의 말단
Hettinger A New Public-Key Cryptosystem
Silverman et al. NTRU Cryptosystems Technical Report Report# 019, Version 1 Title: Timing Attacks on NTRUENCRYPT via Variation in the Number of Hash Calls

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid