KR101809386B1 - 인증 암호 장치, 인증 암호 방법 및 컴퓨터 판독가능한 기록 매체 - Google Patents

인증 암호 장치, 인증 암호 방법 및 컴퓨터 판독가능한 기록 매체 Download PDF

Info

Publication number
KR101809386B1
KR101809386B1 KR1020167002966A KR20167002966A KR101809386B1 KR 101809386 B1 KR101809386 B1 KR 101809386B1 KR 1020167002966 A KR1020167002966 A KR 1020167002966A KR 20167002966 A KR20167002966 A KR 20167002966A KR 101809386 B1 KR101809386 B1 KR 101809386B1
Authority
KR
South Korea
Prior art keywords
encryption
chunk
plaintext
ciphertext
block
Prior art date
Application number
KR1020167002966A
Other languages
English (en)
Other versions
KR20160027982A (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 닛본 덴끼 가부시끼가이샤
Publication of KR20160027982A publication Critical patent/KR20160027982A/ko
Application granted granted Critical
Publication of KR101809386B1 publication Critical patent/KR101809386B1/ko

Links

Images

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/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/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0625Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation with splitting of the data block into left and right halves, e.g. Feistel based algorithms, DES, FEAL, IDEA or KASUMI
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • 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
    • 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/24Key scheduling, i.e. generating round keys or sub-keys for block encryption

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Storage Device Security (AREA)
  • Detection And Correction Of Errors (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Error Detection And Correction (AREA)

Abstract

본 발명은 1 패스 및 1 레이트의 인증 암호를 실현하는데, 상기 인증 암호는 병렬 처리가 가능하고 1개의 암호화 함수만을 사용하여 암호화 및 복호 처리를 전체적으로 수행할 수 있게 되어 있다.  인증 암호 장치는, 입력된 평문 또는 암호문에 대하여, 2 블록마다, tweak가 삽입되어 있는 암호화 함수가 라운드 함수로서 사용되는 2 라운드 Feistel 구조를 적용해서 암호문 또는 복호된 평문을 생성하는 인증 암호 수단을 포함한다.  예를 들어, 평문이 2 블록의 청크들로 나뉘었을 때, 인증 암호 수단은, C[i_1] = F_K((N, Tw_i_1), M[i_1]) xor M[i_2] 및 C[i_2] = F_K((N, Tw_i_2), C[i_1]) xor M[i_1]을 사용하여 i번째의 평문 청크 MC[i] = (M[i_1], M[i_2])에 대응하는 암호문 청크 CC[i] = (C[i_1], C[i_2])을 결정한다.

Description

인증 암호 장치, 인증 암호 방법 및 컴퓨터 판독가능한 기록 매체{AUTHENTICATED ENCRYPTION DEVICE, AUTHENTICATED ENCRYPTION METHOD, AND COMPUTER-READABLE RECORDING MEDIUM}
본 발명은, 공통 키를 사용해서 인증 암호를 행하는 인증 암호 장치, 암호화 장치, 복호 장치, 인증 암호 방법, 및 인증 암호용 프로그램에 관한 것이다.
인증 암호(Authenticated Encryption)(AE)는, 사전에 공유된 비밀 키를 사용하여, 동시에 평문 메시지를 암호화하고 메시지 인증 코드(message authentication code)(MAC)를 부여하는 기술이다. 인증 암호를 사용함으로써, 내용이 도청에 대해서 보호되고 무단 조작이 검지되게 한다. 통신로에 인증 암호를 적용하면, 통신될 내용에 대한 강력한 보호가 실현될 수 있다.
이하에, 인증 암호의 기본적인 입출력을 설명한다. 이하에서는 비밀 키 K를 공유하는 2사람을 앨리스(Alice)와 밥(Bob)을 가정하고, 인증 암호화에 의한 암호화된 메시지는 앨리스로부터 밥으로 통신되는 것으로 가정한다.
인증 암호의 암호화 함수 및 복호 함수를 각각 AEnc_K 및 ADec_K로 한다. 암호화하고 싶은 평문을 M으로 가정하고 초기 벡터라고 불리는 변수N을 도입한다. 초기 벡터 N은 앨리스에 의해 생성되는, 통상은 짧은 고정 길이를 갖는 난수 또는 카운터이다.
먼저 앨리스측의 암호화 처리에 대해서 설명한다. 앨리스는 초기 벡터 N을 생성한 후, (C, T) = AEnc_K(N, M)을 실행한다. 여기서, AEnc_K는 키 K를 파라미터로서 사용하는 암호화 함수라고 불리고, C는 암호문이라고 불리고, T는 인증 태그라고 불리는데, 이들은 변경된 고정 길이를 검출하기 위한 변수이다. 앨리스는 초기 벡터 N, 결과적인 암호문 C, 및 결과적인 인증 태그 T의 조합(N, C, T)을 밥에게 전송한다.
밥측의 복호 처리에 대해서는 이하에 설명한다. 여기에서는, 밥이 앨리스로부터 수신한 정보를 (N', C', T')로서 가정한다. 앨리스로부터 정보를 수신하면, 밥은 복호 처리로서 ADec_K(N', C', T')을 실행한다. ADec_K는 키 K를 파라미터로서 사용하는 복호 함수이다. 만약 통신이 도중에 개찬되고, (N', C', T')가 (N, C, T)와 상이한 경우, 개찬을 나타내는 심볼을 ¥bot로서 가정하면, ADec_K(N', C', T')은 ¥bot를 출력한다. 개찬이 없고 (N', C', T') = (N, C, T)인 경우에, ADec_K(N', C', T')은 앨리스에 의해 암호화된 평문 M과 동일한 내용을 갖는 복호된 평문 M'을 출력한다. 이에 의해, M은 정확하게 복호된다.
실질적으로는, 상기 입출력에, 헤더H라고 불리는 변수를 포함시키는 적이 많다. 헤더H는, 암호화되지 않지만, 예를 들어 프로토콜의 버전 등을 표현하는데 사용될 메시지 인증을 위한 정보이다.
헤더H를 포함했을 경우, 암호화 함수는 (C, T) = AEnc_K(N, M, H)의 입출력이고, 평문 M을 암호화하며 평문 M과 헤더H의 조합에 대하여 메시지 인증 코드를 부여한다. 앨리스는 초기 벡터 N, 헤더H, 결과적인 암호문 C, 및 결과적인 인증 태그 T의 조합(N, H, C, T)을 밥에게 전송한다.
ADec_K(N', C', T', H')의 입출력이 얻어지고 (N', C', T', H')이 (N, C, T, H)와 상이했을 경우, 복호 함수는 개찬을 나타내는 심볼¥bot를 출력한다. 수신된 (N', H', C', T')가 개찬되지 않거나 (N', H', C', T') = (N, H, C, T)이 설정되면, 수신측의 밥은 정확하게 M을 복호할 수 있고, 헤더H가 개찬되지 않은 것을 확인할 수 있다.
입출력에 헤더 H가 첨가된 인증 암호는,데이터 관련 인증 암호(authenticated encryption with associated data)(AEAD)라고 칭할 수 있고,이후는 달리 언급하지 않는 한, 간단히 "인증 암호"라고 표기한다.
인증 암호의 실현 방법 중 하나는, 범용적 결합(generic composition)에 기초한다. 이것은, 안전한 암호화 시스템과 안전한 MAC 시스템의 조합을 사용하는 방법이다. 예를 들어, 일반적으로 알려진 Enc-then-Auth의 조합 경우, 2개의 키 K1과 K2는 (C, T) = MAC_K2(N, Enc_K1(M))로 인증 암호를 실현하기 위해 사용된다. 여기서, Enc_XX가 암호화 시스템에서 사용된 암호화 함수를 나타내고, MAC_XX가 MAC 시스템에서 사용된 MAC의 부여 함수를 나타낸다.
AES(Advanced Encryption Standard) 암호 등의 블록 암호를 사용하는 경우, 예를 들어 암호화 시스템은 AES 카운터 모드 암호화를 사용할 수 있고, MAC 시스템은 CMAC-AES(Cipher-based MAC-AES)을 사용할 수 있다. 또한, 2개의 키를 사용하지 않고, 하나의 블록 암호 키를 사용하여 인증 암호를 행하는 방법으로서, CCM 모드(Counter with CBC-MAC)라고 부르고 있는 인증 암호 시스템이 알려져 있다(예를 들어, 비특허문헌 1).
그러나, 상기 모든 방법은, 암호화와 MAC 부여를 포함하는 2 패스 처리를 필요로 한다. 즉, 데이터는 전체적으로 적어도 2회 주사될 필요가 있다. 또한, 입력 평문이 m 블록들로 되어 있는 경우, CCM 시스템에서 사용된 암호화와 MAC의 함수에 대해서는, 블록 암호가 약 m회 호출될 필요가 있다. 이로 인해, m 블록 평문에 대한 인증 암호 처리에 대해서는 블록 암호가 약 2m회 호출될 필요가 있다. 즉, 암호화 함수 또는 MAC 부여 함수와 같은 처리 함수는 평문 블록 당 2회 호출될 필요가 있다. 각 블록에 대해서 처리 함수를 2회 호출하는 시스템은 2레이트 시스템이라고도 불린다. 2 패스 또는 2레이트 시스템은, 처리에 시간이 걸리고 부하가 크다고 하는 문제가 있었다.
이러한 문제를 해결하는 한가지 방법은, 블록 암호를 사용하는 1 패스 인증 암호 시스템이다.
먼저, 특허문헌 1에 기재된 OCB 모드라고 불리는 인증 암호 시스템이 제안된다(이하, OCB 시스템이라고 한다). OCB 시스템은, 비특허문헌 2에 기재된 Tweakable 블록 암호라고 불리는 블록 암호를 확장되게 한 것이다.
Tweakable 블록 암호는, Tweak라고 불리는 보조 변수가 암호화와 복호에 도입된 인증 암호 시스템이다. 블록 사이즈가 n-bit일 때, Tweakable 블록 암호에 의한 암호화는 "TE_K(Tw, M) = C"로 표현될 수 있고, 복호는 "TD_K(Tw, C) = M"으로 표현될 수 있다. 임의의 (K, Tw) 조합에 대해서, TE_K(Tw, *)은 n-bit 공간 내에서 치환을 구성한다. 그 역 치환은 TD_K(Tw, *)이다. Tw는 보조 변수 Tweak를 나타내고, *은 변수를 나타낸다. 보조 변수 Tw는 복호에 필요하지만, 해제되는 경우, Tweakable 블록 암호의 안전성에는 영향을 미치지 않는다.
OCB 시스템에서는, 먼저, 통상의 블록 암호의 암호화 함수를 비특허문헌 3에 기재된 XEX 모드를 사용해서 Tweakable 블록 암호의 암호화 함수 또는 Tweak 할당 암호화 함수로 변환한다. 계속해서, 다음의 TE_K 함수는 초기 벡터 N 및 평문 M = (M[1], M[2], ... , M[m])를 호출하는 것으로 암호화를 행한다. 각 M[i]은 n 비트 블록으로서 가정된다. OCB 시스템에서 사용된 TE_K 함수는, Tweak에 상당하는 변수 (N, i)를 사용하고 있다. N은 초기 벡터를 나타내고, i는 블록 식별 번호를 나타낸다.
C[1] = TE_K((N,1), M[1]),
C[2] = TE_K((N,2), M[2]),
...,
C[m] = TE_K((N,m), M[m])
인증 태그 T는, 모든 평문 블록의 XOR(배타적 논리합)인 SUM = M[1] xor M[2] xor .... xor M[m]에 대해서, 메시지와 동일한 TE_K 함수를 예를 들어 다음과 같이 호출함으로써 구해진다.
T = TE_K((N,m+1), SUM)
OCB 시스템에서 사용된 TE_K 함수는, Tw= (N, i) 및 비밀 키 K에 의해 계산된 계열 mask_K(N, i)을 블록 암호의 암호화 함수 E_K의 입출력에 가산함으로써 행하여진다(XEX 모드에 의한 변환). XEX 모드에 의한 변환식은, 다음과 같이 표현된다. 이하, 변환식은 XEX 변환식으로 칭해질 있다.
TE_K((N,i), M[i]) = E_K(M[i] xor mask_K(N,i) xor mask_K(N,i)
E_K는 mask의 계산에 사용되고, 효율적인 순차적 처리가 OCB 시스템에서 가능해진다. 즉, mask_K(N, i)로부터 mask_K(N, i+1)까지의 계산은 효율적으로 행해질 수 있다.
도 19는, OCB 시스템에 있어서의 암호화 처리를 개략적으로 설명하는 설명도이다. 도 19에 있어서, 파선으로 나타내는 블록들은 TE_K((N, i), *)에 상당한다. 도 19에서는, mask 계열을 계산하는 처리의 과정은 생략된다.
도 19에 도시한 바와 같이, OCB 시스템에서는 mask 계열을 구하기 위한 L과 인증 태그 T의 계산을 위해서 각각 1회 E_K가 호출되지만, 전체로서 1 패스 처리가 가능하다. 또한, mask 계열의 계산을 제외하면 각 블록에서의 처리는 병렬로 행해질 수 있다. 보다 구체적으로는, m 블록 평문에 대한 블록 암호의 호출들의 수는 거의 m이며, CCM 시스템 및 GCM(Galois/Counter Mode) 시스템 등의 다른 2 패스 인증 암호 시스템에 비해, 약 절반의 처리량이 되고 있다.
미국 특허 제8321675호 명세서
Morris Dworkin, "Recommendation for Block Cipher Modes of Operation: The CCM Mode for Authentication and Confidentiality.", [online] May 2005, NIST Special Publication 800-38C, Internet <URL: http://csrc.nist.gov/publications/nistpubs/800-38C/SP800-38C_updated-July20_2007.pdf> Moses Liskov, Ronald L. Rivest, David Wagner, "Tweakable Block Ciphers.", 2002, Advances in Cryptology - CRYPTO 2002, Lecture Notes in Computer Science 2442 Springer 2002, p. 31-46. P. Rogaway, "Efficient Instantiations of Tweakable Blockciphers and Refinements to Modes OCB and PMAC.", 2004, Advances in Cryptology- ASIACRYPT'04, LNCS 3329, p. 16-31.
도 20은, OCB 시스템에 있어서의 복호 처리를 개략적으로 설명하는 설명도이다. CCM 모드나 GCM에서, 블록 암호의 암호화 함수 E_K만에 의해 인증 암호로서의 복호 처리를 실현하는 것에 반해, OCB 시스템에서는, 도 20에 도시한 바와 같이, Tweakable 블록 암호의 복호 처리에는 블록 암호의 암호화 함수 E_K뿐만 아니라 블록 암호의 복호 함수 D_K도 필요로 한다.
인증 암호의 암호화와 복호에 있어서, 부분으로서 블록 암호의 암호화 함수와 복호 함수의 양쪽을 필요로 하는 경우, 메모리 또는 회로 사이즈에서 실장상의 부담이 증가한다. 대표적인 블록 암호 AES는, 일반적으로 암호화에서보다 복호 처리에서 늦어지고, 그 사실은 AES를 사용하는 OCB 시스템 등에 있어서, 암호화 처리와 복호 처리 사이에서 성능의 차가 발생하는 것을 나타낸다.
OCB와 그것의 유사한 1 패스 인증 암호 시스템은, 상기와 같은 과제를 해결할 수 없다.
따라서, 본 발명은, 병렬 처리를 수행하고, 1개의 암호화 함수만을 사용하여 암호화 및 복호 처리를 전체적으로 수행할 수 있는 1 패스 및 1 레이트의 인증 암호를 실현하는 인증 암호 장치, 암호화 장치, 복호 장치, 인증 암호 방법 및 인증 암호용 프로그램을 제공하는 것을 목적으로 한다.
본 발명에 의한 인증 암호 장치는, 입력된 평문 또는 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문 또는 복호된 평문을 생성하고, 입력된 평문 또는 복호된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 암호화 함수를 적용해서 인증 태그를 생성하는 인증 암호 수단을 포함하는 것을 특징으로 한다.
본 발명에 의한 암호화 장치는, 입력된 평문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문을 생성하고, 입력된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 암호화 함수를 적용해서 인증 태그를 생성하는 암호화 수단을 포함하는 것을 특징으로 한다.
본 발명에 의한 복호 장치는, 입력된 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 복호된 평문을 생성하고, 복호된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 암호화 함수를 적용해서 인증 태그를 생성하는 복호 수단을 포함하는 것을 특징으로 한다.
본 발명에 의한 인증 암호 방법은, 정보 처리 장치가, 입력된 평문 또는 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문 또는 복호된 평문을 생성하고, 입력된 평문 또는 복호된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 암호화 함수를 적용해서 인증 태그를 생성하는 것을 특징으로 한다.
본 발명에 의한 인증 암호용 프로그램은, 컴퓨터에, 입력된 평문 또는 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문 또는 복호된 평문을 생성하고, 입력된 평문 또는 복호된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 암호화 함수를 적용해서 인증 태그를 생성하는 처리를 실행시키는 것을 특징으로 한다.
본 발명에 따르면, 병렬 처리를 수행하고, 1개의 암호화 함수만을 사용하여 전체적으로 암호화 및 복호 처리를 수행할 수 있는 1 패스 및 1 레이트의 인증 암호를 실현할 수 있다.
도 1은 본 발명에 따른 암호화 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도를 도시한다.
도 2는 본 발명에 따른 복호 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도를 도시한다.
도 3은 인증 암호 시스템이 포함하는 장치의 예를 설명하는 블록도를 도시한다.
도 4는 인증 암호 시스템의 기능 구성예를 설명하는 블록도를 도시한다.
도 5는 2 변수 입력의 의사 랜덤 함수의 실현 예를 개략적으로 설명하는 설명도를 도시한다.
도 6은 (a)는 블록 암호 XEX 모드를 사용한 의사 랜덤 함수에 의한 암호화 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도를 도시하고, (b)는 블록 암호 XEX 모드를 사용한 의사 랜덤 함수에 의한 복호 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도를 도시한다.
도 7은 2 변수 입력의 의사 랜덤 함수의 다른 실현 예를 개략적으로 설명하는 설명도를 도시한다.
도 8은 제1 실시 형태의 인증 암호 시스템의 암호화 동작의 일례를 설명하는 흐름도를 도시한다.
도 9는 제1 실시 형태의 인증 암호 시스템의 복호 동작의 일례를 설명하는 흐름도를 도시한다.
도 10은 인증 암호 시스템의 다른 구성예를 설명하는 블록도를 도시한다.
도 11은 제2 실시 형태의 암호화 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도를 도시한다.
도 12는 제2 실시 형태의 복호 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도를 도시한다.
도 13은 제3 실시 형태의 암호화 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도를 도시한다.
도 14는 제3 실시 형태의 복호 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도를 도시한다.
도 15는 병렬 처리에 대한 암호화 장치(100)의 구성예를 설명하는 블록도를 도시한다.
도 16은 병렬 처리에 대한 복호 장치(200)의 구성예를 설명하는 블록도를 도시한다.
도 17은 본 발명의 인증 암호 장치의 최소 구성예를 설명하는 블록도를 도시한다.
도 18은 본 발명의 인증 암호 장치의 다른 구성예를 설명하는 블록도를 도시한다.
도 19는 OCB 시스템에서의 암호화 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도를 도시한다.
도 20은 OCB 시스템에서의 복호 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도를 도시한다.
먼저, 본 발명의 개요를 설명한다. 본 발명은, 미리 결정된 사이즈마다 암호화를 행하는 블록 암호 시스템을 기초로 한 공통 비밀 키를 사용한 암호화 시스템에 관한 것이다. 본 발명은, 2 블록마다 2 라운드 Feistel 구조를 적용한다. 2 라운드 Feistel 구조의 라운드 함수에, Tweak(조정치)라고 불리는 보조 변수 Tw를 할당한 암호화 함수를 사용한다. 이와 같이 하여, Feistel 구조를 2 블록 단위로 인증 암호에 사용함으로써, 상술한 과제를 해결한다.
이하, 보다 구체적으로 본 발명의 인증 암호 시스템을 설명한다. 본 발명에서는, 암호화 함수에 도입하는 보조 변수 Tw를 가정하는 변수들의 다음의 계열을 사용한다. 이하, 보조 변수 Tw로서 사용된 변수들의 계열을 "보조 계열"이라고 칭할 수 있다. 보조 계열은, 1개의 키에 의해 암호화를 행하고 있는 동안, 호출될 모든 암호화 함수에 상이한 값이 입력되도록 구성된다. 이하에서는, 1개의 평문을 암호화할 때마다 값이 다른 초기 벡터 N과, 2 블록 단위의 청크를 식별하는 식별자i와, 그 청크 내의 블록을 다른 처리로부터 식별하는 j와의 조합, 또는 (N, i, j)의 조합에서의 보조 계열이 보조 변수 Tw로서 사용되는 경우를 하기에 설명하지만, 그 보조 계열은 이것에 한정되지 않는다. 보조 계열은, 1개의 평문에 대하여, 양쪽 암호화 및 복호 동안에 동일한 값을 생성할 수 있도록 구성된다. 예를 들어, 보조 계열을 생성하기 위한 값은 미리 정의되어 있다. 상기의 예는, 초기 벡터와, 평문 또는 암호문의 길이에 기초하여 보조 계열의 값이 유일하게 정의될 수 있기 때문에, 상기 조건을 만족한다.
예를 들어, 각 블록이 n 비트를 갖는 것으로 가정했을 때, 처리될 평문 또는 암호문에서의 블록들의 수가 2m이면, 각 블록의 인덱스에 따른 보조 계열로서 (N, 1, 1), (N, 1, 2), (N, 2, 1), (N, 2, 2), ..., (N, m, 1), (N, m, 2)을 사용하고, 인증 태그 생성용의 보조 계열로서 (N, m, 3)을 사용하는 것으로 가정할 수 있다.
이렇게 보조 계열을 정의함으로써, 암호화 처리에서는, 암호화될 평문 M을 2 블록의 청크들로 처리한다. i번째의 평문 청크(M[2i-1], M[2i], 단 (i=1, ..., m))에 대하여, 보조 계열(N, i, 1), (N, i, 2)와 2 변수 입력의 의사 랜덤 함수로서의 키(keyed) 의사 랜덤 함수 F_K(*,*)을 사용하여, i번째의 암호문 청크(C[2i], C[2i-1])를 생성한다. "의사 랜덤 함수"는, 암호화 함수를 그 성질에 기초하여 나타낼 때의 호칭이다. 의사 랜덤 함수는, 예를 들어 블록 암호의 암호화 함수 또는 키(keyed) 해시 함수일 수 있다.
도 1은, 본 발명의 암호화 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도이다. 도 1에 있어서, 파선의 블록들은 2 라운드 Feistel 구조이며, 2 블록 단위의 암호화 처리에서의 처리 블록들에 상당한다. 예를 들어, 각 처리 블록에서는, 제1 입력 변수를 보조 계열로서 가정하면, 보조 계열(N, i, 1)을 제1 입력 변수로 한 F_K((N, i, 1),*)과, 보조 계열(N, i, 2)을 제1 입력 변수로 한 F_K((N, i, 2),*)을 사용하여, 다음과 같이 해서 i번째의 암호문 청크(C[2i], C[2i-1])를 얻는다. xor은 비트마다의 배타적 논리합을 나타낸다.
C[2i-1] = F_K((N,i,1), M[2i-1]) xor M[2i],
C[2i] = F_K((N,i,2), C[2i-1]) xor M[2i-1]
… 식(1)
식(1)은, i번째의 평문 청크의 홀수 블록 M[2i-1]에 대하여, i번째의 평문 청크의 홀수 블록에 대응하는 보조 계열(N, i, 1)을 사용해서 의사 랜덤 함수 F_K 을 실행함으로써 얻은 결과와 i번째의 평문 청크의 짝수 블록 M[2i]과의 배타적 논리합을, i번째의 암호문 청크의 홀수 블록으로서의 암호문 블록 C[2i-1]으로서 가정하고, 그렇게 얻어진 암호문 블록 C[2i-1]에 대하여, i번째의 평문 청크의 짝수 블록에 대응하는 보조 계열(N, i, 2)을 사용해서 의사 랜덤 함수 F_K를 실행함으로써 얻어진 결과와 i번째의 평문 청크의 홀수 블록 M[2i-1]과의 배타적 논리합을, i번째의 암호문 청크의 짝수 블록으로서의 암호문 블록 C[2i]로서 가정하는 것을 나타내고 있다. 그 처리는 이들 모든 청크에 대하여 행한다.
상술한 처리 외에, 평문의 모든 짝수 블록 M[2], M[4], ..., M[2m]에 대해서 배타적 논리합을 취한 평문 체크섬 SUM = M[2] xor M[4] xor ... xor M[2m]에 대하여, 평문의 인증 태그 생성용의 보조 계열(N, m, 3)과, 키 K를 갖는 2 변수 입력의 의사 랜덤 함수 F_K를 사용하여, 인증 태그 T를 생성한다. 도 1에 있어서, 1점 쇄선의 블록은 인증 태그 생성 처리를 위한 처리 블록에 상당한다. 인증 태그 T는 , 예를 들어 보조 계열(N, m, 3)을 제1 입력 변수로서 사용하는 F_K((N, m, 3),*)을 사용해서, 다음과 같이 얻어진다. SUM의 계산에 있어서의 배타적 논리합은 산술 가산과 같이, 임의의 그룹에 있어서의 가산일 수 있다.
T = F_K((N, m, 3), SUM) … 식(2)
짝수 블록 및 홀수 블록에 대한 처리들은 서로 교체될 수 있다. 그러한 경우에는, 각 홀수 블록으로부터 평문 체크섬을 생성할 수 있다. 또한, 2 블록 단위의 청크들로의 분할은 이에 제한되지 않는다. 온라인(on-line) 계산을 하지 않는 등 순차 처리의 필요성이 비교적 높지 않을 경우에는, 예를 들어 제1 블록과 제3 블록으로 1개의 청크를 만드는 것도 가능하다. 보조 계열은, 도면 중의 모든 의사 랜덤 함수들에 대하여, 1개의 키에 의해 암호화를 행하고 있는 사이, 상이한 값들이 입력되도록 구성될 수 있다. 도면에서, +을 원으로 둘러싼 기호는 배타적 논리합을 취하는 것으로 나타내고 있다.
복호측에는, 암호문 C, 초기 벡터 N, 및 인증 태그 T가 보내진다.
복호측에, 복호될 암호문 C, 초기 벡터 N, 및 인증 태그 T가 입력되면, 동일한 룰에 따라, 보조 계열을 먼저 결정한다. 예를 들어, 각 블록이 n 비트를 갖는 암호문 C =(C[1], C[2], ..., C[2m])을 가정하면, (N, 1, 1), (N, 1, 2), (N, 2, 1), (N, 2, 2), ..., (N, m, 1), (N, m, 2)은 암호문 C의 각 블록의 인덱스에 따른 보조 계열로서 사용되는 것으로 결정될 수 있고, (N, m, 3)은 초기 벡터 N과 암호문의 길이에 대한 정보에 기초하여 인증 태그 생성용의 보조 계열로서 사용되는 것으로 결정될 수 있다.
또한 복호 처리에서도, 복호될 암호문 C를 2 블록의 단위의 청크들로 나누고, i번째의 암호문 청크(C[2i-1], C[2i], 단 (i=1, ..., m))에 대하여, 암호화에서와 동일한 보조 계열을 도입한 의사 랜덤 함수 F_K(*,*)로 구성된 2 라운드 Feistel 구조를 이용한 복호 처리를 행한다. 이에 의해, 복호된 평문 청크(M’[2i], M’[2i-1])을 획득할 수 있다.
또한, 평문의 모든 결과적인 짝수 블록 M’[2], M’[4], ... ,M’[2m]에 대해서 배타적 논리합을 취한 평문 체크섬에 기초하여, 암호화 시에 행해진 처리와 동일한 처리를 행하면, 복호 검증용 인증 태그 T가 획득된다.
도 2는 본 발명에 따른 복호 처리 전체의 처리 플로우의 일례를 개략적으로 설명한 설명도이다. 도 2에 있어서, 파선의 블록들은 2 라운드 Feistel 구조이며, 2 블록 단위의 복호 처리의 처리 블록에 상당한다. 각 처리 블록에서는, 보조 계열(N, i, 1)을 제1 입력 변수로서 사용한 F_K((N, i, 1),*)과, 보조 계열(N, i, 2)을 제1 입력 변수로서 사용한 F_K((N, i, 2),*)을 사용해서 다음과 같이 복호된 평문 블록 M’[2i] 및 M’[2i-1]을 얻는다.
M'[2i-1] = F_K((N,i,2), C[2i-1]) xor C[2i],
M'[2i] = F_K((N,i,1), M'[2i-1]) xor C[2i-1]
… 식(3)
이들 처리를 모든 암호문 청크들에 대하여 행한다. 복호된 평문의 모든 짝수 블록 M’[2], M’[4], ..., M’[2m]에 대해서 배타적 논리합을 취한 복호 검증을 위한 평문 체크섬 SUM' = M[2] xor M’[4] xor ..., xor M’[2m]에 대하여, 복호된 평문의 인증 태그 생성용의 보조 계열(N, m, 3)과, 키 K를 갖는 2 변수 입력의 의사 랜덤 함수 F_K를 사용해서, 복호 검증용 인증 태그 T’를 생성한다. 도 2에 있어서, 1점 쇄선의 블록들은 인증 태그 생성 처리의 처리 블록에 상당한다. 복호 검증용 인증 태그 T'은, 보조 계열(N, m, 3)을 제1 입력 변수로서 사용한 F_K((N, m, 3), *)을 사용해서 다음과 같이 얻어진다.
T’= F_K((N, m, 3), SUM') … 식(4)
복호 검증용 인증 태그 T’를 얻으면, 입력된 인증 태그 T가 복호 검증용 인증 태그 T'와 일치하는지의 여부를 검사하고, 이들이 일치한 경우, 복호된 평문 M' = (M’[1], M’[2], ..., M’[2m])을 출력한다. 이들이 일치하지 않으면, 복호 에러를 나타내는 에러 메시지를 출력한다.
본 복호 시스템에서 암호문을 정확하게 복호할 수 있는 것은, 2 라운드 Feistel 구조는 임의의 라운드 함수에 대해서 치환을 구성하기 때문에, 암호화 함수에 대한 키와 보조 변수가 결정되면, 평문 청크와 암호문 청크가 일대일로 서로 대응하고, 보조 계열은 초기 벡터와 평문 또는 암호문의 길이에 기초하여 유일하게 정의되도록 구성되어 있고, 암호화와 복호 양쪽에 대해서 동일한 보조 계열이 사용되는 것에 의한다.
추가적으로, 2 라운드 Feistel 구조에 있어서 개개의 라운드에서의 처리에 있어서 라운드 함수 자체의 역 처리(함수의 출력으로부터 입력을 구하는 처리)가 불필요하고, 전체로서도 라운드 함수의 역 처리가 불필요하다. 본 시스템에서는, 라운드 함수에 암호화 함수를 사용하고, 따라서 평문을 암호문으로 변환하는 데 있어서, 암호화 함수의 역 처리를 필요로 하지 않는다. 또한, 인증 태그의 생성 처리에서, 양쪽의 암호화 및 복호 시에 동일한 처리를 행하고, 따라서 이 처리에 있어서도 암호화 함수의 역 처리를 필요로 하지 않는다.
본 시스템의 안전성은, 암호화 함수의 안전성에 귀착할 수 있다. 이것은, 본 시스템이 2 라운드 Feistel 구조에 있어서 암호화 함수가 2회 적용되는 짝수 블록의 SUM에 기초하여 인증 태그를 생성하도록 구성되기 때문이다. 변경된 암호문을 복호했을 경우, 복호의 결과로서 임의의 짝수 블록에서 개찬을 행한 공격자(물론, 키를 모르는)가 예측 불가능한 난수가 높은 확률로 발생하므로, 그 배타적 논리합, 또는 평문 체크섬도 예측 불가능하게 된다. 이에 의해, 평문 체크섬을 암호화 함수에 입력해서 얻어진 복호 검증용 인증 태그 T'도 예측 불가능하게 된다.
본 시스템에 의하면, 인증 암호를 암호화 함수만으로 실현할 수 있으므로, HMAC 등의 키(keyed) 해시 함수를 사용하는 것도 가능하게 된다. 또한, 블록 암호 또는 해시 함수에 의한 것 이외에도 다양한 암호 기술을 기반으로 할 수 있다.
본 시스템에 의하면, 2 블록 단위로 처리들이 독립하고 있고, 인증 태그용의 평문 체크섬도 얻어진 평문 블록들을 순차 연산 처리에서 얻어질 수 있으므로, 온라인(on-line) 계산이 가능하다.
이하에 제1 실시 형태에 따라, 평문이 짝수 블록들로 분할되게 하기 위해 인증 암호 시스템을 적용한 인증 암호 시스템을 설명한다. 제2 및 이후의 실시 형태들에 따라, 확장된 방식으로, 최종 블록의 사이즈가 블록 사이즈보다 작고 또는 홀수 블록이 발생하는 경우에도 대응 가능한 인증 암호 시스템을 적용한 인증 암호 시스템을 설명한다.
제1 실시 형태
본 발명의 제1 실시 형태에 관한 인증 암호 시스템의 구성예를 도 3, 도 4, 및 도 5를 참조하여 설명한다. 도 3은, 본 실시 형태의 인증 암호 시스템이 포함하는 장치의 예를 나타내는 블록도이다. 도 3에 도시한 바와 같이, 본 실시 형태의 시스템은, 정보 처리 장치(50)를 포함하고 있다. 정보 처리 장치(50)는, 연산부(51), 기억부(52) 및 입출력부(53)를 포함한다. 정보 처리 장치(50)는, 예를 들어 프로그램에 따라서 동작하는 퍼스널 컴퓨터 등이다. 이 경우, 연산부(51), 기억부(52) 및 입출력부(53)는, 각각 CPU, 메모리 및 각종 입출력 장치(예를 들어, 키보드, 마우스, 및 네트워크 인터페이스부)에 의해 실현된다. 도 3에서는, 1개의 장치가 연산부(51), 기억부(52) 및 입출력부(53)의 모두를 포함하는 것을 나타냈지만, 연산부(51), 기억부(52) 및 입출력부(53)는 복수의 장치들로 분산될 수 있다.
도 4는, 본 실시 형태의 인증 암호 시스템의 기능 구성예를 도시하는 블록도이다. 도 4에 도시한 바와 같이, 인증 암호 시스템은, 암호화 수단(10)을 포함하는 암호화 장치(100), 및 복호 수단(20)을 포함하는 복호 장치(200)를 포함할 수 있다. 암호화 장치(100) 및 복호 장치(200)는, 예를 들어 도 3에 도시한 바와 같은 정보 처리 장치(50)에 의해 실현된다.
먼저, 암호화 장치(100)가 포함하는 암호화 수단(10)에 대해서 설명한다. 암호화 수단(10)은, 입력 수단(101)과, 보조 변수 생성 수단(102)과, 2 라운드 Feistel 암호화 수단(103)과, 태그 계산 수단(104)과, 출력 수단(105)을 갖는다.
이하, 달리 언급이 없는 한, 1개의 블록의 길이를 n 비트로 가정한다.
입력 수단(101)은, 암호화될 평문 M과, 초기 벡터 N을 입력한다. 입력 수단(101)은, 키보드 등의 문자 입력 장치에 의해 실현된다. 이하에서는 짝수개의 블록을 갖는 평문 M = (M[1], ..., M[2m])이 입력되었다고 가정한다. 또한, 간략화를 위하여, 초기 벡터 N은 n 비트를 갖는 것으로 가정하지만, 가령 짧은 경우에는, 적당한 패딩(padding)을 행하거나, n 비트 출력 및 가변 길이 입력의 의사 랜덤 함수(예를 들어 CMAC 또는 HMAC에 의해 실현 가능)를 추가로 적용해서 n 비트로 단축하는 것으로 한다. 여기서, 패딩이란, 바이너리 계열의 뒤에 고정 계열을 연결하여, 특정한 길이를 달성하는 것을 말한다. 예를 들어, 제로 패딩 또는 10* 패딩(처음은 1, 그 다음은 00...0)이 채택된다. 후자는, 길이가 다른 계열이 패딩후에 동일한 값을 갖는 것을 방지하는 효과가 있다. 이 경우, 제로 패딩이 채택될 수 있다.
보조 변수 생성 수단(102)은, 초기 벡터 N과 평문 M의 길이에 대한 정보를 바탕으로, 복호 처리에 있어서 의사 랜덤 함수에 부여하는, 일반적으로 Tweak 또는 조정 값이라고 불리는 보조 변수를 생성한다. 본 실시 형태에 따르면, 보조 변수로서 다음과 같은 변수들의 계열(보조 계열)을 생성한다. 하나의 보조 계열은, 정 정수i와 j에 대해서, (N, i, j)의 형식의 3개의 요소를 갖는 벡터에 의해 표현된다. 평문이 2m 블록들을 가질 경우, 보조 계열은, (N, 1, 1), (N, 1, 2), (N, 2, 1), (N, 2, 2), ..., (N, m-1, 1), (N, m-1, 2), (N, m, 1), (N, m, 2), (N, m, 3)이 된다. 최후의 하나를 제외한 변수들이 암호화에 사용되고, 최후의 하나만이 인증 태그의 생성에 사용된다.
2 라운드 Feistel 암호화 수단(103)은, 도 1에 있어서 파선의 각 블록 처리를 실행하기 위한 것이며, 평문 M을, 2 블록 단위로 분할하고, 보조 입력과 2 변수 입력의 의사 랜덤 함수 F_K(*,*)을 사용해서 암호화를 행한다. 2 변수 입력의 의사 랜덤 함수 F_K(*,*)은, 키(keyed) n-bit 출력 함수인데, 여기서 임의의 x 및 y에 대해서, F_K(x, y)이, 키 K를 모르는 사람에 의해 난수로부터 분간할 수가 없는 출력이 되는 것이다.
이하에서는, F_K(*,*)의 첫번째 입력 변수에는 보조 계열 중 어느 하나가 입력되고, 두번째에는 암호화될 평문 블록으로서의 n-bit 변수가 입력되는 경우를 설명한다. 본 실시 형태에 있어서도, 평문 M = (M[1], ..., M[2m])에 대해서 MC[i] = (M[2i-1], M[2i])가 가정되고, 그들 간의 MC[i]을 i번째의 평문 청크로 칭한다. 또한, CC[i] = (C[2i-1], C[2i])가 가정되고, 그들 간의 CC[i]을 i번째의 암호문 청크로 칭한다.
2 라운드 Feistel 암호화 수단(103)은, 각 i = 1, ..., m에 대해서, 평문 청크 MC[i]을, 예를 들어 식(1)에서와 같이 처리함으로써, 암호문 청크 CC[i]을 얻는다.
이미 설명한 바와 같이, F_K(*,*)은 다양한 암호화 함수에 의해 실현이 가능하다. 예를 들어, 블록 암호의 암호화 함수를 사용하는 것도 가능하다. n-bit 블록 암호의 암호화 함수 E(*)을 사용하는 경우, Y = F_K((N, i, j), X)는, Tweakable 블록 암호라고 불리는 확장된 블록 암호를 이용함으로써 효율적으로 계산하는 것이 가능하다.
구체적으로는, 비특허문헌 2에 기재된 XEX 모드를 사용하여, XEX 변환식에서와 같이, TweaK(N, i, j)와, 비밀 키 K로부터 계산된 계열 mask_K(N, i, j)을 블록 암호의 입력에 가산함으로써 실현할 수 있다. 이러한 모드에서의 변환식은, 다음과 같이 표현된다. 이하, 이 변환식을 XE 변환식이라고 칭할 수 있다.
TE_K((N,i,j),X) = E_K(X xor mask_K(N,i,j)) … 식(5)
식(5)의 XE 변환식을 적용함으로써, Y = F ((N, i, j), X)에 상당하는 계산이 가능하다. 구체적인 mask_K(N, i, j)의 계산 방법은, 예를 들어 다음에 나타내는 방법을 채택할 수 있다.
mask_K(N, i, j) =2^i 3^ (j-1) L, 여기서 L = E_K(N) … 식(6)
여기서, 2^i 또는 3^j 은 2 또는 3을 유한체 GF(2^n) 상의 상수로서 가정하는 멱승 연산을 나타내고, 2^i 3^j L은 L을 유한체 GF(2^n) 상의 요소로서 가정하는 (2^i 3^j)에 의한 승산을 나타낸다. 도 5는, 본 실시 형태에서 사용하는 2 변수 입력의 의사 랜덤 함수가 블록 암호의 XEX 모드를 사용해서 실현되는 예를 개략적으로 설명하는 설명도이다. 도 5는, 상술한 방법에서 실현되는 2 변수 입력의 의사 랜덤 함수의 예를 설명한다. 도 6의 (a)는, 2 변수 입력의 의사 랜덤 함수를, 블록 암호의 XEX 모드를 사용해서 실현했을 때 본 실시 형태에 따른 암호화 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도이다.
여기서, L은 식(6)에 있어서 where 절에서 나타낸 L = E_K(N)이다. 따라서, N이 정의될 때마다 1회 E_K가 동작될 수 있다. L이 변화하지 않고, I 또는 j가 순서대로 변화할 때, B = 2^i 3^j L은 과거의 계산 결과를 이용해서 효율적으로 계산이 가능하고, 따라서 최초에 L=E(N)을 구한 다음, 상기 계산량을, 거의 Y = E(B xor X)의 계산량으로서 간주할 수 있다. 추가적으로, 유한체 GF(2^n) 상의 상수는 비특허문헌 2에 기재된 XEX 모드를 사용한 다양한 시스템에서 설정될 수 있다.
XE 변환식은, 외측에 mask_K 출력을 가산하지 않는 점에서, OCB 시스템에서 사용된 XEX 변환식과는 상이한데, 그 이유는 OCB 시스템이 TE_K의 복호 함수TD_K를 필요로 하는 것에 반해, 본 발명에 따라 TE_K만으로 처리가 수행될 수 있기 때문이다.
XEX 모드 이외에도, 문헌 "Kazuhiko Minematsu, "Improved Security Analysis of XEX and LRW Modes.", selected Areas in Cryptography 2006, p.96-113."(비특허문헌 4)에 기재된 Tweakable 블록 암호나, 문헌 "Niels ferguson, et al., "The Skein Hash Function Family.", [online] 2008, Internet<URL: http://www.skein-hash.info/sites/default/files/skein1.1.pdf">"(비특허문헌 5)에 기재된 Tweakable 블록 암호의 암호화 함수 Threefish를 사용하는 것도 가능하다.
또한, 다른 실현 예로서 F_K(*,*)에, HMAC 등의 키(keyed) 해시 함수를 사용하는 것도 가능하다. 이 경우, Y = F_K((N, i, j), X)는, (N, i, j)에 적당한 가역 부호화를 실시한 다음, X와 연결해서 HMAC이 입력으로 함으로써 계산될 수 있다.
예를 들어, 보조 계열에 사용한 변수 N, i, j를 적당한 고정 길이(예를 들어, 128-bit)의 바이너리 표현으로 해서, 그것들을 연결할 수 있다. 도 7은, 본 실시 형태에서 사용하는 2 변수 입력의 의사 랜덤 함수가 키(keyed) 해시 함수를 사용해서 실현되는 예를 개략적으로 설명하는 설명도이다. 도 7은, 상술한 방법에 의해 실현되는 2 변수 입력의 의사 랜덤 함수의 예를 나타내고 있다. 도 7에 있어서의 " ||" 기호는 비트 연결을 나타내고 있다. 입력 X와 보조 입력(N, i, j)은, HMAC_K(N || i || j || X)이라고 하는 출력이 된다.
또한, 예를 들어 도 5에 도시하는 E_K 대신 HMAC_K를 사용함으로써 F_K(*,*)을 실현할 수 있다.
i = 1, ..., m에 대해서 상기 처리를 행하고, 결과적인 C = (C[1], ..., C[2m])이 암호문이 된다.
태그 계산 수단(104)은, 도 1에 있어서 1점 쇄선의 블록 처리를 실행하기 위한 것이며, 보조 변수 생성 수단(102)에 의해 출력된 보조 계열과, 입력된 평문을 사용해서 메시지 인증을 위한 인증 태그를 계산한다.
본 실시 형태에 있어서의 태그 계산 수단(104)은, 먼저 인증 태그의 생성에 사용하는 평문 체크섬 SUM을, 평문의 짝수 블록 M[2], M[4], ... , M[2m]을 사용해서 다음과 같이 구한다. SUM의 계산에 있어서의 배타적 논리합은 임의의 그룹에 있어서의 가산, 예를 들어 산술 가산일 수 있다.
SUM = M[2] xor M[4] xor ... xor M[2m] … 식(7)
즉, 평문의 짝수 블록 M[2], M[4], ..., M[2m]의 전부의 합을 구하고, SUM으로 한다. 계속해서, 구한 평문 체크섬에 대하여, 2 변수 입력을 갖는 의사 랜덤 함수 F_K(*,*)와, 인증 태그 생성용의 보조 계열(N, m, 3)을 사용해서 식(2)에 나타내는 처리를 행하여, 인증 태그 T를 구한다.
출력 수단(105)은, 2 라운드 Feistel 암호화 수단(103)에 의해 출력된 암호문 C = (C[1], ..., C[2m])과, 태그 계산 수단(104)에 의해 출력된 인증 태그 T를 출력한다. 출력 수단(105)은, 예를 들어 암호화를 요구한 상위 애플리케이션에 출력해도 좋고, 통신 장치 등을 통해서 통신 경로에 출력해도 좋다. 또한, 컴퓨터 디스플레이 또는 프린터에 출력해도 좋다.
이어서, 복호 장치(200)가 포함하는 복호 수단(20)에 대해서 설명한다. 복호 수단(20)은, 입력 수단(201)과, 보조 변수 생성 수단(202)과, 2 라운드 Feistel 복호 수단(203)과, 복호 검증용 태그 계산 수단(204)과, 판정 수단(205)과, 출력 수단(206)을 갖는다.
입력 수단(201)은, 복호될 암호문 C와, 초기 벡터 N과, 해당 암호문에 연관된 인증 태그 T를 입력한다. 암호화 수단(10)과 마찬가지로, 이하에서는 복수개의 블록을 갖는 암호문 C = (C[1], ..., C[2m])이 입력되었다고 가정한다. 또한, 간략화를 위하여, 초기 벡터 N은 n 비트를 갖는 것으로 가정하지만, 가령 짧은 경우에는, 적당한 패딩을 행하거나, n 비트 출력의 의사 랜덤 함수를 추가적으로 적용해서 n 비트로 단축하는 것으로 한다.
보조 변수 생성 수단(202)은, 초기 벡터 N과 암호문 C의 길이에 대한 정보를 바탕으로, 복호 처리에 있어서 의사 랜덤 함수에 부여하는 보조 변수를 생성한다. 본 실시 형태에 따르면, 암호화 수단(10)의 보조 변수 생성 수단(102)과 동일한 보조 변수를 출력한다.
2 라운드 Feistel 복호 수단(203)은, 도 2에 있어서 파선의 각 블록에 상당하며, 2 블록 단위로 분할하고, 보조 변수 생성 수단(202)에 의해 출력된 보조 계열과 2 변수 입력의 의사 랜덤 함수 F_K(*,*)을 사용해서 암호문 C를 복호화한다. 여기서, 2 라운드 Feistel 복호 수단(203)이 사용하는 2 변수 입력의 의사 랜덤 함수 F_K(*,*)는, 암호화 수단(10)의 2 라운드 Feistel 암호화 수단(103)이 사용하는 F_K(*,*)과 동일한 것이다.
2 라운드 Feistel 복호 수단(203)은, 각 i=1, ..., m에 대해서, 암호문 청크 CC[i]를, 예를 들어 식(3)에서와 같이 처리하고, 이에 의해 복호된 평문 청크 MC’[i] = (M'[2i-1], M'[2i])을 얻는다.
각i에 대해서 상기의 처리를 행하여, 결과적인 M' = (M’[1], ..., M’[2m])이 평문으로 복호된다.
복호 검증용 태그 계산 수단(204)은, 도 2에 있어서 1점 쇄선의 블록에 상당하며, 보조 변수 생성 수단(202)이 출력하는 보조 계열과, 2 라운드 Feistel 복호 수단(203)에 의해 복호된 평문 M'을 사용해서 복호 결과를 검증하기 위한 복호 검증용 인증 태그 T’를 계산한다. 여기서, 복호 검증용 태그 계산 수단(204)이 사용하는 2 변수 입력의 의사 랜덤 함수 F_K(*,*)는, 암호화 수단(10)의 태그 계산 수단(104)이 사용하는 F_K(*,*)과 동일한 것이다.
복호 검증용 태그 계산 수단(204)은, 먼저 복호된 평문 M'을 사용해서 복호 검증용의 평문 체크섬 SUM'을, 복호된 평문의 짝수 블록 M’[2], M’[4], ..., M’[2m]을 사용해서 다음과 같이 구한다.
SUM' = M’[2] xor M’[4] xor ... xor M'[2m] … 식(8)
즉, 복호된 평문의 짝수 블록 M’[2], M’[4], ..., M’[2m]의 전부의 합을 구하고, SUM'로 한다. 계속해서, 구한 복호 검증용의 평문 체크섬 SUM'에 대하여, 2 변수 입력을 갖는 의사 랜덤 함수 F_K(*,*)와, 인증 태그 생성용의 보조 계열(N, m, 3)을 사용하여, 식(4)에 나타내는 처리를 행하여, 인증 태그 T’를 구한다. SUM의 계산에 있어서의 배타적 논리합은 임의의 그룹에 있어서의 가산, 예를 들어 산술 가산일 수 있다.
도 6의 (b)는 2 변수 입력의 의사 랜덤 함수를, 블록 암호의 XEX 모드를 사용해서 실현했을 경우의 본 실시 형태에 따른 복호 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도이다. 도 6의 (b)에 나타내는 예에 있어서도, 2 변수 입력의 의사 랜덤 함수에 외부로부터 부여된 파라미터를 바꾸는 것만으로, 도 6의 (a)에 나타낸 암호화 처리와 동일한 처리에 의해 복호된 평문 M' 및 복호 검증용 인증 태그 T'가 얻어지는 것을 알 수 있다.
판정 수단(205)은, 입력된 인증 태그 T와, 복호 검증용 태그 계산 수단(204)에 의해 생성된 복호 검증용 인증 태그 T’를 비교하고, 이들이 일치하는 경우에는, 2 라운드 Feistel 복호 수단(203)이 출력하는, 복호된 평문 M' = (M’[1], ..., M’[2m])을 올바른 것으로 가정하여 복호가 성공되었다고 판정한다. 한편, T'과 T가 상이할 경우에는, 입력 수단(201)이 입력한 (N, C, T)가 개찬된 것으로 가정하여 복호가 실패되었다고 판정한다.
판정 수단(205)이 판정의 결과로서 복호가 성공했다고 판정한 경우에는, 출력 수단(206)은, 복호된 평문 M' = (M’[1], ..., M’[2m])을 출력한다. 한편, 복호가 실패했다고 판정된 경우에는, 복호된 평문 M' = (M’[1], ..., M’[2m])을 출력하지 않고, 다만 복호 에러를 나타내는 에러를 출력한다. 그 결과는, 상위 애플리케이션이나, 통신 경로나, 디스플레이 장치나 프린터 등에 출력된다.
본 실시 형태에 따르면, 입력 수단(101) 및 입력 수단(201)은, 예를 들어 장치가 포함하는 키보드, 마우스 또는 네트워크 인터페이스부 등의 각종 입력 장치와, 그 제어부들에 의해 실현된다. 또한, 출력 수단(105) 및 출력 수단(206)은, 예를 들어 장치가 포함하는 디스플레이 장치나, 프린터와의 디바이스 인터페이스부나, 네트워크 인터페이스부 등의 각종 출력 장치와, 그 제어부들에 의해 실현된다. 또한, 보조 변수 생성 수단(102), 보조 변수 생성 수단(202), 2 라운드 Feistel 암호화 수단(103), 2 라운드 Feistel 복호 수단(203), 태그 계산 수단(104), 복호 검증용 태그 계산 수단(204), 및 판정 수단(205)은, 예를 들어 장치가 포함하는, 프로그램에 따라서 동작하는 CPU에 의해 실현된다.
도시를 생략하고 있지만, 암호화 수단(10) 및 복호 수단(20)은, 각 수단을 적절히 호출하는 등 암호화 처리 또는 복호 처리를 제어하는 제어 수단을 포함한다.
이어서, 본 실시 형태에 따른 동작에 대해서 설명한다. 도 8 및 도 9는, 본 실시 형태에 따른 인증 암호 시스템의 동작 일례를 나타내는 흐름도이다. 도 8은, 암호화 동작의 일례를 나타내는 흐름도이며, 도 9는, 복호 동작의 일례를 나타내는 흐름도이다.
먼저, 도 8을 참조하여 본 실시 형태에 의한 암호화 동작을 설명한다. 도 8에 나타내는 예에서는, 먼저 입력 수단(101)이, 암호화될 짝수개의 블록을 갖는 평문 M = (M[1], ..., M[2m])과, 초기 벡터 N을 입력한다(단계 S101).
이어서, 보조 변수 생성 수단(102)이, 초기 벡터 N과 평문 M의 길이에 대한 정보를 바탕으로, 보조 계열을 생성한다(단계 S102). 본 예에서는, 2m개의 분할된 블록들을 가정하여, (N, 1, 1), (N, 1, 2), (N, 2, 1), (N, 2, 2), ..., (N, m-1, 1), (N, m-1, 2), (N, m, 1), (N, m, 2), (N, m, 3)을 출력한다. 보조 계열은 한번에 모두 생성될 필요는 없고, 어떤 보조 계열을 사용하는지를 결정해 두면, 암호화 함수를 호출할 때마다 그 암호화 함수에 따른 보조 계열을 생성하고 출력할 수 있다.
이어서, 2 라운드 Feistel 암호화 수단(103)이, 평문 M을, 2 블록 단위로 분할하고, 보조 변수 생성 수단(102)에 의해 생성된 보조 계열과, 미리 결정된 의사 랜덤 함수 F_K(*,*)를 사용해서 암호화를 행하여, 암호문 C = (C[1], ..., C[2m])을 구한다(단계 S103 내지 S106). 예를 들어, 최초에 i=1에서 i를 초기화한 후에(단계 S103), 2 라운드 Feistel 암호화 수단(103)은, i가 나타내는 평문 청크 MC[i] = (M[2i-1], M[2i])에 대하여, 2 블록 단위에서의 Feistel 암호화 처리 또는 식(1)을 실행하는 처리(단계 S104)를, ++i > m이 만족될 때까지 반복해서 행할 수 있다.
이어서, 태그 계산 수단(104)은, 평문 M의 짝수 블록을 사용해서 평문 체크섬 SUM을 계산하고 (단계 S107), 결과적인 SUM과, 인증 태그 생성용의 보조 계열(N, m, 3)을 사용해서 인증 태그 T를 계산한다(단계 S108).
마지막으로, 출력 수단(105)은 결과적인 암호문 C와 태그 T를 출력한다 (단계 S109).
이어서, 도 9을 참조하여 본 실시 형태에 의한 복호 동작을 설명한다. 도 9에 나타내는 예에서는, 먼저 입력 수단(201)이, 복호될 짝수개의 블록을 갖는 암호문 C = (C[1], ..., C[2m])과, 초기 벡터 N과, 인증 태그 T를 입력한다(단계 S201).
이어서, 보조 변수 생성 수단(202)이, 초기 벡터 N과 암호문 C의 길이에 대한 정보를 바탕으로, 보조 계열을 생성한다(단계 S202). 본 예에서는, 2m개의 분할된 블록들을 가정하여, (N, 1, 1), (N, 1, 2), (N, 2, 1), (N, 2, 2), ..., (N, m-1, 1), (N, m-1, 2), (N, m, 1), (N, m, 2), (N, m, 3)을 출력한다. 보조 계열은 한번에 모두 생성하는 필요는 없고, 어떤 보조 계열을 사용하는지를 결정해 두면, 암호화 함수를 호출할 때마다 그 암호화 함수에 따른 보조 계열을 생성하고 출력할 수 있다.
이어서, 2 라운드 Feistel 복호 수단(203)이, 암호문 C를, 2 블록 단위로 분할하고, 보조 변수 생성 수단(202)에 의해 생성된 보조 계열과, 미리 결정된 의사 랜덤 함수 F_K(*,*)을 사용해서 복호를 행하여, 복호된 평문 M' = (M’[1], ..., M’[2m])을 구한다(단계 S203 내지 S206). 2 라운드 Feistel 복호 수단(203)은, 예를 들어 최초에 i를 i=1에서 초기화한 후(단계 S203), i가 나타내는 암호문 청크 CC[i] = (C[2i-1], C[2i])에 대하여, 2 블록 단위에서의 Feistel 복호 처리 또는 식(3)을 실행하는 처리(단계 S204)를, ++i > m이 만족될 때까지 반복해서 행할 수 있다.
이어서, 복호 검증용 태그 계산 수단(204)이, 복호된 평문 M'을 사용해서 복호 검증용의 평문 체크섬 SUM'을 계산하고(단계 S207), 결과적인 SUM'과, 인증 태그 생성용의 보조 계열(N, m, 3)을 사용해서 복호 검증용 인증 태그 T’를 계산한다(단계 S208).
이어서, 판정 수단(205)은, 입력된 인증 태그 T와 복호 검증용 인증 태그 T’를 비교하고(단계 S209), 이들이 일치할 때, 복호가 성공했다고 판정하고, 이들이 일치하지 않을 때에는 복호가 실패했다고 판정한다.
마지막으로, 출력 수단(206)은, 판정 수단(205)의 판정 결과에 기초하여, 복호된 평문 M' 또는 에러 메시지를 출력한다. 출력 수단(206)은, 판정 수단(205)에 의한 판정의 결과로서, 복호가 성공했을 때는 복호된 평문 M'을 출력하고(단계 S210), 복호가 실패했을 때는 에러 메시지를 출력한다(단계 S211).
상기는, 암호화 장치와 복호 장치가 다른 장치들에 의해 실현되어 있는 경우를 설명했지만, 도 10에 도시한 바와 같이, 하나의 장치가 암호화 수단(10)과 복호 수단(20)의 양쪽을 포함할 수 있다. 그러한 경우, 암호화 수단(10)과 복호 수단(20)을 포함하는 인증 암호 수단(30)을 제공하고, 그 인증 암호 수단(30)에 있어서, 복호 수단(20)은, 암호화 수단(10)의 보조 변수 생성 수단(102), 2 라운드 Feistel 암호화 수단(103) 및 태그 계산 수단(104)을, 보조 변수 생성 수단(202), 2 라운드 Feistel 복호 수단(203) 및 복호 검증용 태그 계산 수단(204) 대신에 사용하는 것도 가능하다. 또한, 하나의 장치는 암호화 수단(10)과 복호 수단(20)의 양쪽을 포함할 경우에 있어서도, 각 수단은 복수의 장치에 나누어서 실장될 수 있다.
암호화 수단(10)과 복호 수단(20)이 보조 변수 생성 수단(102)을 공유하는 경우, 예를 들어 호출원이 초기 벡터나 길이를 지정할 수 있도록 구성될 수 있다. 마찬가지로, 2 라운드 Feistel 암호화 수단(103)을 공유하는 경우, 예를 들어 호출원이 상단의 2 변수 입력의 의사 랜덤 함수 F_K(*,*)에의 입력 및 하단의 2 변수 입력의 의사 랜덤 함수 F_K(*,*)에의 입력을 지정할 수 있도록 구성될 수 있다. 마찬가지로, 태그 계산 수단(104)을 공유하는 경우, 예를 들어 호출원이 평문 체크섬을 지정할 수 있도록 구성될 수 있다.
이상과 같이, 본 실시 형태에 따르면, 고속 및 콤팩트한 인증 암호를 실현할 수 있다. 그 이유는, 본 발명에 따른 인증 암호 시스템이, S개의 블록을 갖는 평문에 대하여, 2 변수 입력의 의사 랜덤 함수 F_K(*,*)를 S+1회 호출하는 것으로 암호화와 복호를 행하기 때문이다.
예를 들어, 블록 암호의 암호화 함수 E(*)을 사용하는 경우, 2 변수 입력의 의사 랜덤 함수 F_K(*,*)은, 암호화 함수 E를 Tweakable 블록 암호를 위해 암호화 함수 TE(*,*)로 변환함으로써 실현할 수 있지만, E -> TE 변환 시스템을 이용하면, 블록 암호의 암호화 함수 E(*)을 겨우 S+h회만 호출함으로써, 암호화 및 복호 둘 다가 실현 가능하게 된다.
한편, 기존의 2 패스 인증 암호 시스템에서는 2×2m회 이상의 암호화 함수의 호출이 필요해진다. 1 패스 인증 암호 시스템으로서의 OCB 시스템에서는, 본 발명에 따른 것과 거의 동등한, S+2 내지 S+3회 정도의 호출 횟수가 되지만, 복호 처리에 있어서 블록 암호의 복호 함수를 필요로 하기 때문에, 소프트웨어 실장에 있어서의 ROM/RAM 사용이나, 하드웨어 실장에 있어서의 회로 규모의 증가를 야기한다.
본 발명에 따른 인증 암호 시스템에 의하면, 2 블록 단위로 완전히 병렬 처리가 가능하기 때문에, 멀티 코어 CPU에서의 소프트웨어 실장이나, 하드웨어 실장에 있어서는 한층 더 고속화를 실현할 수 있다.
제2 실시 형태
제2 실시 형태에 있어서의 인증 암호 시스템은, 암호화 또는 복호될 대상이 짝수개의 블록을 갖고 최후의 블록의 길이가 n 비트 미만이 되도록 되어 있다. 기본적인 구성은 제1 실시 형태와 마찬가지이므로, 이하 상이한 점에 대해서만 설명한다.
이하의 예에서는, 1블록이 n 비트를 갖는 것을 가정하여, 짝수 블록을 갖는 평문의 최종 블록 M[2m]의 비트 길이 s는 s < n이라고 한다.
본 실시 형태에서는, 새롭게 인증 태그 생성용의 제2 보조 계열을 정의한다. 이하의 예에서는, (N, m, 4)을 새롭게 정의한다.
2 블록 단위에서의 Feistel 암호화 처리 및 Feistel 복호 처리에 있어서, m번째의 청크에 대하여, 다음과 같이 처리한다. i = 1, ..., m-1번째의 청크에 대하여는 제1 실시 형태에서와 동일하게 처리할 수 있다.
먼저, 암호화 처리는, m번째의 평문 청크의 홀수 블록으로서의 평문 블록 M[2m-1]에 대하여 보조 계열(N, m, 1)을 부여한 2 변수 입력의 의사 랜덤 함수 F_K(*,*)을 적용시킨다. 그 다음, 결과적인 출력을 중간 출력 Z와, 그 중간 출력 Z의 고정 부분으로부터 s 비트를 취출한 s 비트의 바이너리 계열 Z_s와, m번째의 평문 청크의 짝수 블록으로서의 평문 블록 M[2m]과의 배타적 논리합을 취하는 것에 의해, m번째의 암호문 청크의 짝수 블록으로서의 암호문 블록 C_s[2m]을 구한다. C_s[*]은 해당하는 암호문 블록의 사이즈가 s 비트인 것을 나타낸다.
또한, 그렇게 얻어진 s 비트의 암호문 블록 C_s[2m]에 대하여 s → n 비트의 패딩을 행하고, 그 결과인 C_n[2m]에 대하여 보조 계열(N, m, 2)을 부여한 2 변수 입력의 의사 랜덤 함수 F_K(*,*)을 적용시킨 다음, m번째의 평문 청크의 홀수 블록으로서의 평문 블록 M[2m-1]과의 배타적 논리합을 취하는 것에 의해, m번째의 암호문 청크의 홀수 블록으로서의 암호문 블록 C[2m-1]을 구한다. 본 실시 형태에 따르면, 그렇게 해서 m번째의 암호문 청크 CC[m] = (C[2m-1], C_s[2m])을 얻는다. 본 실시 형태에 따른 m번째의 암호문 청크를 얻기 위한 처리 일례를 다음과 같이 표현한다.
C_s[2m] = cut_s(Z) xor M[2m],
C[2m-1] = F_K((N,m,2), pad_n(C_s[2m]))) xor M[2m-1]
여기서,Z=F_K((N,m,1), M[2m-1])
… 식(9)
cut_s(A)은, 바이너리 계열 A 내의 고정 부분으로부터 s 비트를 취출하는 처리를 나타낸다. cut_s(A)은, 예를 들어 msb_s(A)일 수 있다. msb_s(A)은 바이너리 계열 A의 최상위로부터 s 비트를 취출하는 처리이다. 또한, pad_n(A)은, 바이너리 계열 A가 n 비트를 갖도록 고정 비트 계열을 사용해서 패딩의 처리를 나타낸다. 본 예에서는, 패딩은 10* 패딩으로 한다. 10* 패딩을 가정하면, 길이가 다른 계열이 패딩 후 동일한 값을 갖는 것을 방지할 수 있다. 길이가 다른 계열이 패딩 후 동일한 값을 갖지 않는 임의의 형식은 상기의 예에 한정되지 않게 채택될 수 있다.
인증 태그 T는 다음과 같이 구해질 수 있다. 먼저, 평문 체크섬 SUM을, m-1번째까지의 평문 청크의 짝수 블록 M[2], ..., M[2(m-1)]과, 상술한 처리에서 얻어진 중간 출력 Z와, 상술한 처리에서 얻어진 m번째의 암호문 청크 중 짝수 블록으로서의 암호문 블록 C_s[2m]이 n 비트에 패딩되는 C_n[2m]을 사용해서 구한다. 예를 들어, 이하의 식(10)에 도시한 바와 같이, 이들의 배타적 논리합을 취함으로써 구해진다.
SUM = M[2] xor M[4] xor ... xor M[2m-2] xor C_n[2m] xor Z
… 식(10)
평문 체크섬 SUM은 M[2m] 대신 "C_n[2m] xor Z"를 사용한다는 점에서 제1 실시 형태에 따라 생성된 평문 체크섬과는 상이하다.
그렇게 얻어진 평문 체크섬 SUM에 대하여, 보조 변수 (N, m, 4)을 사용하는 2 변수 입력의 의사 랜덤 함수 F_K((N, m, 4),*)을 적용시킴으로써, 인증 태그 T를 구한다.
도 11은 본 실시 형태에 따른 암호화 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도이다. 도 11에 도시한 바와 같이, 본 실시 형태에 따른 암호화 처리는, 인증 태그 생성에 사용된 보조 계열과, 비트 사이즈가 n 미만의 짝수 블록을 포함하는 청크에 대한 암호화 처리와, 평문 체크섬의 계산 방법을 제외하면, 제1 실시 형태와 동일하다. 도 11에 있어서, "C_s[2m]||10*"은 C_s[2m]에 대해 10* 패딩을 수행한 결과를 나타내고 있다.
본 실시 형태에 따른 암호화 수단(10)은, 예를 들어 짝수 블록을 갖는 평문의 최종 블록 M[2m]이 s(s < n) 비트를 가질 때, 보조 변수 생성 수단(102)이 보조 계열(N, 1, 1), (N, 1, 2), (N, 2, 1), (N, 2, 2), ..., (N, m, 1), (N, m, 2), (N, m, 4)을 생성하고, m번째의 평문 청크에 대하여 상술한 처리를 행하고 암호문 청크 CC[m]와 중간 출력 Z를 출력하는 제2의 2 라운드 Feistel 암호화 수단과, 상술한 처리에서 인증 태그 T를 계산하는 제2 태그 계산 수단을 포함할 수 있다. 또는, 제2의 2 라운드 Feistel 암호화 수단과 제2 태그 계산 수단을 제공하는 대신, 2 라운드 Feistel 암호화 수단(103) 및 태그 계산 수단(104)이, 평문의 사이즈에 따라 제1 실시 형태에 따른 동작과, 상술한 동작을 전환해서 실행할 수 있다.
복호 처리에서는, 먼저, m번째의 암호문 청크의 짝수 블록으로서의 s 비트 암호문 블록 C_s[2m]에 대하여 s → n 비트 패딩을 행한다. 그리고, 패딩에 의해 얻어진 n 비트 암호문 블록 C_n[2m] 비트에 대하여 보조 계열(N, m, 2)을 부여한 2 변수 입력의 의사 랜덤 함수 F_K(*,*)을 적용시킨다. 그 결과와, m번째의 암호문 청크의 홀수 블록에 상당하는 암호문 블록 C[2m-1]과의 배타적 논리합을 취하는 것에 의해, m번째의 복호된 평문 청크의 홀수 블록에 상당하는 복호된 평문 블록 M’[2m-1]을 구한다.
이어서, 그와 같이 얻어진 복호된 평문 블록 M’[2m-1]에 대하여 보조 계열(N, m, 1)을 부여한 2 변수 입력의 의사 랜덤 함수 F_K(*,*)을 적용시킨다. 그 다음, 결과적인 출력은 복호용 중간 출력 Z'으로서 가정되고, 그 복호용 중간 출력 Z'의 고정 부분으로부터 s 비트를 취출한 s 비트의 바이너리 계열 Z_s'과, m번째의 암호문 청크의 짝수 블록으로서의 암호문 블록 C_s[2m]과의 배타적 논리합을 취하는 것에 의해, m번째의 복호된 평문 청크의 짝수 블록에 상당하는 복호된 평문 블록 M_s’[2m]을 구한다. M_s'[*]은 해당하는 복호된 평문 블록의 사이즈가 s 비트인 것을 나타낸다. 본 실시 형태에 따르면, 그렇게 해서 m번째의 복호된 평문 청크 MC’[m] = (M’[2m-1], M_s’[2m])을 얻는다. 본 실시 형태에 따른 m번째의 복호된 평문 청크를 얻기 위한 처리 일례를 다음과 같이 표현한다.
M'[2m-1] = F_K((N,m,2), pad_n(C_s[2m]))) xor C[2m-1],
M_s'[2m] = cut_s(Z') xor C_s[2m]
여기서,Z' =F_K((N,m,1), M'[2m-1])
… 식(11)
복호 검증용 인증 태그는 다음과 같이 구해질 수 있다. 먼저, 복호된 평문을 사용하는 복호 검증용의 평문 체크섬 SUM'은, m-1번째까지의 복호된 평문 청크의 짝수 블록 M’[2], ..., M’[2(m-1)]과, 상술한 처리 에서 얻어진 복호용 중간 출력 Z'과, 입력된 m번째의 암호문 청크의 짝수 블록으로서의 암호문 블록 C_s[2m]을 n 비트에 패딩함으로써 얻어진 C_n[2m]을 사용해서 구해진다. 예를 들어, 이는 이하의 식(12)에서 도시한 바와 같이, 이들의 배타적 논리합을 취함으로써 구해진다.
SUM' = M’[2] xor M’[4] xor ... xor M’[2m-2] xor C_n[2m] xor Z'
… 식(12)
평문 체크섬 SUM'은, M’[2m] 대신 "C_n[2m] xor Z'"을 사용한다는 점에서 제1 실시 형태에 따라 생성된 복호 검증용의 평문 체크섬과는 상이하다.
그렇게 얻어진 복호 검증용의 평문 체크섬 SUM'에 대하여, 보조 계열 (N, m, 4)을 갖는 2 변수 입력의 의사 랜덤 함수 F_K((N, m, 4),*)을 적용시킴으로써, 복호 검증용 인증 태그 T’를 계산한다.
도 12는 본 실시 형태에 있어서의 복호 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도이다. 도 12에 도시한 바와 같이, 본 실시 형태에 있어서의 복호 처리는, 인증 태그 생성용의 보조 계열과, 비트 사이즈가 n 미만의 짝수 블록을 포함하는 청크에 대한 복호 처리와, 복호 검증용의 평문 체크섬의 계산 방법을 제외하면, 제1 실시 형태에서와 동일할 수 있다. 도 12에 있어서, "C_s[2m] || 10*"은 C_s[2m]에 대해 10* 패딩을 행함으로써 얻어진 결과를 나타내고 있다.
본 실시 형태의 복호 수단(20)은, 짝수 블록을 갖는 암호문의 최종 블록 C[2m]이 s(s < n) 비트인 경우에, m번째의 암호문 청크에 대하여 상술한 처리를 행해서 복호된 평문 청크 MC'와, 복호용 중간 출력 Z'을 출력하는 제2의 2 라운드 Feistel 복호 수단과, 상술한 처리에서 복호 검증용 인증 태그 T’를 계산하는 제2 복호 검증용 태그 계산 수단을 포함하고, 보조 변수 생성 수단(202)은, 보조 계열(N, 1, 1), (N, 1, 2), (N, 2, 1), (N, 2, 2), ..., (N, m, 1), (N, m, 2), (N, m, 4)을 생성하도록 구성될 수 있다. 또한, 이미 설명한 2 라운드 Feistel 복호 수단(203) 및 복호 검증용 태그 계산 수단(204)이, 평문의 사이즈에 따라, 제1 실시 형태의 동작과 상술한 동작을 전환해서 실행하도록 구성될 수 있다.
또한, 본 실시 형태에 있어서도, m번째의 블록에 대한 암호화 처리와 복호 처리는, 상단과 하단 간에 교체가 되고 있는 것 뿐이므로, 상단과 하단을 나누어서 부품화하면, 이들은 암호화 처리와 복호 처리 사이에서 공유될 수 있다. 또한, 인증 태그의 생성에 관해서도, 제1 실시 형태에서와 같이, 부여하는 파라미터를 호출원에서 지정하도록 하면, 이는 그들 간에 공유될 수 있다.
본 실시 형태에 있어서도, 보조 입력과 키가 정의되면, 평문 청크와 암호문 청크가 1 대 1로 대응하게 구성되어 있기 때문에, 최후의 청크가 정확하게 복호될 수 있다. 또한, Feistel 구조에서 개개의 라운드에서의 처리에 있어서 암호화 함수 F_K 자체는 역 처리가 불필요하고, 본 실시 형태에 있어서도 복호 검증용 인증 태그는 암호화 처리와 동일한 방법에서 구해지기 때문에, 본 실시 형태는 암호화 함수 F_K 자체가 전체적으로 역 처리될 필요가 없다는 점에서, 제1 실시 형태와 동일하다.
제3 실시 형태
제3 실시 형태에 있어서의 인증 암호 시스템은, 암호화 또는 복호될 대상이, 홀수 개의 블록을 갖게 되어 있다. 기본적인 구성은 제1 실시 형태와 마찬가지이므로, 이하 상이한 점에 대해서만 설명한다.
본 실시 형태에 따르면, 1블록이 n 비트를 갖는 것으로 가정하여 평문의 블록수가 홀수 (2m-1)이고, 그 최종 블록의 비트 길이 s가 s ≤ n인 경우에, 다음과 같이 인증 암호를 행한다.
새롭게 인증 태그 생성용의 제3 및 제4 보조 계열을 정의한다. 이하의 예에서는, (N, m, 5) 및 (N, m, 6)을 새롭게 정의한다. 홀수 블록을 갖는 평문에 있어서, 최종 청크의 짝수 블록에 대응하는 보조 계열(N, m, 2)은 불필요하다.
2 블록 단위에서의 Feistel 암호화 처리 및 Feistel 복호 처리에 있어서, m번째의 청크는 다음과 같이 처리된다. 추가적으로, i = 1, ..., m-1번째의 청크는 제1 실시 형태에서와 같이 처리될 수 있다.
암호화 처리에서는, 모두 0로 이루어지는 n 비트의 바이너리 계열을 준비하고, 그 바이너리 계열에 대하여 보조 계열(N, m, 1)을 부여한 2 변수 입력의 의사 랜덤 함수 F_K(*,*)을 적용시킨다. 결과적인 출력에서의 고정 부분으로부터 s 비트가 취출된 s 비트의 바이너리 계열 Z_s와, m번째의 평문 청크의 홀수 블록으로서의 평문의 최종 블록으로서의 s 비트 평문 블록 M_s[2m-1]과의 배타적 논리합을 취하는 것에 의해, m번째의 암호문 청크에 있어서의 홀수 블록 또는 암호문의 최종 블록에 상당하는 암호문 블록 C_s[2m-1]을 구한다.
본 실시 형태에 따르면, 그렇게 해서 m번째의 암호문 청크 CC[m] = (C_s[2m-1])을 얻는다. 본 실시 형태에 있어서의 m번째의 암호문 청크를 얻기 위한 처리 일례를 다음과 같이 표현한다.
C_s[2m-1] = cut_s(F_K((N, m, 1), 0^n)) xor M_s[2m-1]
… 식(13)
최종 블록의 사이즈가 s = n인 경우에는, cut_s()을 생략하고, 이하의 식(14)에 나타내는 처리를 행함으로써, CC[m] = (C[2m-1])을 얻는다.
C[2m-1] = F_K((N, m, 1), 0^n) xor M[2m-1]
… 식(14)
인증 태그 T는 다음과 같이 구해진다. 본 실시 형태에 따르면, 최종 블록의 사이즈가 s = n이면, 평문 체크섬 SUM은, m-1번째까지의 평문 청크의 짝수 블록 M[2], ..., M[2(m-1)]과, 최종 블록으로서의 평문 블록 M[2m-1]을 사용해서 구해진다. 예를 들어, 이는 이하의 식(15)에 도시한 바와 같이, 이들의 배타적 논리합을 취함으로써 구해진다.
SUM = M[2] xor M[4] xor ... xor M[2m-2] xor M[2m-1]
… 식(15)
한편, 최종 블록의 사이즈가 s < n이면, 평문 체크섬 SUM은, m-1번째까지의 평문 청크의 짝수 블록 M[2], ..., M[2(m-1)]과, 최종 블록으로서의 s 비트 평문 블록 M_s[2m-1]을 n 비트에 패딩함으로써 얻어진 M_n[2m-1]을 사용해서 구해진다. 예를 들어, 이는 이하의 식(16)에 도시한 바와 같이, 이들의 배타적 논리합을 취함으로써 구해진다.
SUM = M[2] xor M[4] xor ... xor M[2m-2] xor pad_n (M_s[2m-1])
… 식(16)
평문 체크섬 SUM은, 제1 실시 형태에서 생성하는 평문 체크섬과는, M[2m] 대신에 M_n[2m-1] (M[2m-1] 또는 M_s[2m-1]을 n 비트로 확장한 것)을 사용하고 있다는 점에서, 상이하다.
그렇게 얻어진 평문 체크섬 SUM에 대하여, s = n에서 보조 계열 (N, m, 5)을 갖는 2 변수 입력의 의사 랜덤 함수 F_K((N, m, 5),*)을 적용시키고, s < n에서 보조 계열 (N, m, 6)을 갖는 2 변수 입력의 의사 랜덤 함수 F_K((N, m, 6),*)을 적용시킴으로써, 인증 태그 T를 구한다.
도 13은 본 실시 형태에 있어서의 암호화 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도이다. 도 13에 도시한 바와 같이, 본 실시 형태에 있어서의 암호화 처리는, m번째의 청크에 대한 암호화 처리와, 인증 태그의 생성 처리를 제외하면, 제1 실시 형태에서와 동일하다. 도 13에 있어서, "M_s[2m-1] || 10*"은 s 비트 평문 블록 M_s[2m]에 대해 10* 패딩을 햄함으로써 얻어진 결과를 나타내고 있다. 도 13에서는 최종 블록의 사이즈가 s < n인 경우를 나타내고 있지만, s = n의 경우에는 m번째의 블록에 대한 처리에 있어서의 커팅(도면에서, "cut_s")과 인증 태그 생성 처리에 있어서의 패딩(도면에서, "|| 10*")을 생략할 수 있다. s = n인 경우, M_s[m-1] = M[m-1] 및 C_s[2m-1] = C[2m-1]가 설정되고, cut_s() 또는 pad_n()을 실행하더라도, 실질적으로 전혀 처리가 행해지지 않기 때문에, cut_s() 또는 pad_n()을 생략하지 않아도 특별히 문제는 없다.
본 실시 형태의 암호화 수단(10)은, 예를 들어 평문이 2m-1개의 블록을 갖는 경우에, 보조 변수 생성 수단(102)이 보조 계열 (N, 1, 1), (N, 1, 2), (N, 2, 1), (N, 2, 2), ..., (N, m, 1), (N, m, 5), (N, m, 6)을 생성하고, m번째의 평문 청크에 대하여 상술한 처리를 행하고 암호문 청크 CC[m] = (C_s[2m-1])을 출력하는 1 라운드 Feistel 암호화 수단과, 상술한 처리에서 인증 태그 T를 계산하는 제3 태그 계산 수단을 포함할 수 있다. 또한, 1 라운드 Feistel 암호화 수단과 제3 태그 계산 수단을 제공하는 대신에, 2 라운드 Feistel 암호화 수단(103) 및 태그 계산 수단(104)이, 평문의 사이즈에 따라 제1 실시 형태의 동작과, 상술한 동작을 전환해서 실행하도록 구성될 수 있다. 보조 변수 생성 수단(102), 2 라운드 Feistel 암호화 수단(103) 및 태그 계산 수단(104)이, 평문의 사이즈에 따라 제1 실시 형태의 동작과 제2 실시 형태의 동작을 전환해서 실행하도록 구성되어 있으면, 블록수가 짝수의 경우, 홀수의 경우, 최종 블록이 n 미만의 사이즈의 경우의 모든 경우에도 대응할 수 있다.
복호 처리에서도, 모두 0로 이루어지는 n 비트의 바이너리 계열을 준비하고, 그 바이너리 계열에 대하여 보조 계열(N, m, 1)을 부여한 2 변수 입력의 의사 랜덤 함수 F_K(*,*)을 적용시킨다. 결과적인 출력에서의 고정 부분으로부터 s 비트 취출한 s 비트의 바이너리 계열 Z_s와, m번째의 암호문 청크의 홀수 블록으로서 또는 암호문의 최종 블록으로서의 s 비트의 암호문 블록 C_s[2m-1]과의 배타적 논리합을 취하는 것에 의해, m번째의 복호된 평문 청크에 있어서의 홀수 블록 또는 복호된 평문의 최종 블록에 상당하는 복호된 평문 블록 M_s’[2m-1]을 구한다.
본 실시 형태에 따르면, 그렇게 해서 m번째의 복호된 평문 청크 MC’[m] = (M_s’[2m-1])을 얻는다. 본 실시 형태에 있어서의 m번째의 복호된 평문 청크를 얻기 위한 처리 일례를 다음과 같이 표현한다.
M_s’[2m-1] = cut_s(F_K((N, m, 1), 0^n)) xor C_s[2m-1]
… 식(17)
최종 블록의 사이즈가 s = n인 경우에는, cut_s()을 생략하고, 이하의 식(18)에 나타내는 처리를 행함으로써, MC'[m] = (M’[2m-1])을 얻는다.
M’[2m-1] = F_K((N, m, 1), 0^n) xor C[2m-1]
… 식(18)
복호 검증용 인증 태그 T'는, 암호화 처리에 있어서의 평문을 복호된 평문으로 치환함으로써 구해질 수 있다. 즉, 최종 블록의 사이즈가 s = n이면, 복호 검증용의 평문 체크섬 SUM'은, m-1번째까지의 복호된 평문 청크의 짝수 블록 M’[2], ..., M’[2(m-1)]과, 최종 블록으로서의 복호된 평문 블록 M’[2m-1]을 사용해서 구한다. 이는 예를 들어, 이하의 식(19)에 도시한 바와 같이, 이들의 배타적 논리합을 취함으로써 구해진다.
SUM' = M’[2] xor M[4] xor ... M’[2m-2] xor M’[2m-1]
… 식(19)
한편, 최종 블록의 사이즈가 s < n이면, 복호 검증용의 평문 체크섬 SUM'은, m-1번째까지의 복호된 평문 청크의 짝수 블록 M’[2], ..., M’[2(m-1)]과, 최종 블록으로서의 s 비트 평문 블록 M_s’[2m-1]을 n 비트에 패딩함으로써 얻어진 M_n’[2m-1]을 사용해서 구해진다. 이는 예를 들어, 이하의 식(20)에 도시한 바와 같이, 이들의 배타적 논리합을 취함으로써 구해진다.
SUM' = M'[2] xor M'[4] xor ... M'[2m-2] xor pad_n(M_s'[2m-1])
… 식(20)
복호 검증용의 평문 체크섬 SUM'은, 제1 실시 형태에서 생성된 복호 검증용의 평문 체크섬과는, M’[2m] 대신에 M_n’[2m-1] (M’[2m-1] 또는 M_s’[2m-1]을 n 비트에 확장한 것)을 사용하고 있다는 점에서 상이하다.
그렇게 얻어진 복호 검증용의 평문 체크섬 SUM'에 대하여, s = n이라면 (N, m, 5)을 보조 계열로 하는 2 변수 입력의 의사 랜덤 함수 F_K((N, m, 5),*)을 적용시키고, s < n이라면 (N, m, 6)을 보조 계열로 하는 2 변수 입력의 의사 랜덤 함수 F_K((N, m, 6),*)을 적용시킴으로써, 복호 검증용 인증 태그 T’를 구한다.
도 14는 본 실시 형태에 있어서의 복호 처리 전체의 처리 플로우의 일례를 개략적으로 설명하는 설명도이다. 도 14에 도시한 바와 같이, 본 실시 형태에 있어서의 복호 처리는, m번째의 암호문 청크에 대한 복호 처리와, 복호 검증용 인증 태그의 생성 처리를 제외하면, 제1 실시 형태에서와 동일하다. 도 14에 있어서, "M_s’[2m-1] || 10*"은 s 비트의 복호된 평문 블록 M_s’[2m-1]에 대해 10* 패딩을 행함으로써 얻어진 결과를 나타내고 있다. 도 14는 최종 블록의 사이즈가 s < n인 경우를 나타내고 있지만, s = n의 경우에는 m번째의 블록에 대한 처리에 있어서의 커팅(도면에서, "cut_s")과 인증 태그 생성 처리에 있어서의 패딩(도면에서, "|| 10*")을 생략할 수 있다. s = n이라면, C_s[2m-1] = C[2m-1] 및 M_s’[m-1] = M’[m-1]이 설정되고, cut_s() 또는 pad_n()을 실행하더라도, 실질적으로 전혀 처리가 행해지지 않기 때문에, cut_s() 또는 pad_n()을 생략하지 않아도 특별히 문제는 없다.
본 실시 형태의 복호 수단(20)은, 예를 들어 암호문이 2m-1개의 블록을 갖는 경우에, 보조 변수 생성 수단(202)이 보조 계열 (N, 1, 1), (N, 1, 2), (N, 2, 1), (N, 2, 2), ..., (N, m, 1), (N, m, 5), (N, m, 6)을 생성하고, m번째의 암호문 청크에 대하여 상술한 처리를 행하고 복호된 평문 청크 MC’[m] = (M_s’[2m-1])을 출력하는 1 라운드 Feistel 복호 수단과, 상술한 처리에서 복호 검증용 인증 태그 T’를 계산하는 제3 복호 검증용 태그 계산 수단을 포함할 수 있다. 또는, 1 라운드 Feistel 복호 수단과 제3 복호 검증용 태그 계산 수단을 제공하는 대신, 2 라운드 Feistel 복호 수단(203) 및 복호 검증용 태그 계산 수단(204)이, 암호문의 사이즈에 따라서 제1 실시 형태의 동작과, 상술한 동작을 전환해서 실행하도록 구성될 수 있다. 보조 변수 생성 수단(202), 2 라운드 Feistel 복호 수단(203) 및 복호 검증용 태그 계산 수단(204)이, 암호문의 사이즈에 따라, 제1 실시 형태의 동작과 제2 실시 형태의 동작을 전환해서 실행하도록 구성되어 있으면, 블록수가 짝수의 경우, 홀수의 경우, 또는 최종 블록이 n 미만의 사이즈인 경우의 모든 경우에도 대응할 수 있다.
본 실시 형태에 있어서도, m번째의 블록에 대한 암호화 처리와 복호 처리는, 부여하는 파라미터가 서로 상이하고 처리 내용은 동일하기 때문에, 제1 실시 형태에서와 마찬가지로, 부여하는 파라미터를 호출원에서 지정할 수 있으면, 이는 그들 간에 공유될 수 있다. 또한, 인증 태그의 생성에 관해서도, 제1 실시 형태에서와 마찬가지로, 부여하는 파라미터를 호출원에서 지정할 수 있으면, 이는 그들 간에 공유될 수 있다.
본 실시 형태에 있어서도, 보조 입력과 키가 정의되면, 평문 청크와 암호문 청크가 1 대 1로 대응하게 되어 있기 때문에, 최후의 청크가 정확하게 복호될 수 있도록 구성된다. 또한, Feistel 구조에서는 개개의 라운드에서의 처리에 있어서 암호화 함수 F_K 자체가 역 처리가 불필요하고, 본 실시 형태에 있어서도 복호 검증용 인증 태그가 암호화 처리와 동일한 방법에서 구해지기 때문에, 전체적으로 암호화 함수 F_K 자체가 제1 실시 형태 및 제2 실시 형태에서와 마찬가지로 역 처리가 불필요하게 된다.
도 15는 병렬 처리에 대한 암호화 장치(100)의 구성예를 도시하는 블록도이다. 도 16은 병렬 처리에 대한 복호 장치(200)의 구성예를 도시하는 블록도이다. 도 15에 도시한 바와 같이, 복수의 2 라운드 Feistel 암호화 수단(103)이 제공되어, 각 평문 청크에 대한 암호화 처리를 2 블록 단위로 병렬로 행할 수 있다. 도 15에 있어서, 일부 2 라운드 Feistel 암호화 수단(103)은, 평문의 사이즈에 따라, 제2의 2 라운드 Feistel 암호화 수단 또는 1 라운드 Feistel 암호화 수단으로서 동작한다. 또한, 태그 계산 수단(104)은, 평문의 사이즈에 따라, 제2 태그 계산 수단 또는 제3 태그 계산 수단으로서 동작한다. 또한 도 16에 도시한 바와 같이, 복수의 2 라운드 Feistel 복호 수단(203)이 제공되어, 각 암호문 청크에 대한 복호 처리를 2 블록 단위로 병렬로 행할 수 있다. 도 16에 있어서, 일부 2 라운드 Feistel 복호 수단(203)은, 암호문의 사이즈에 따라, 제2의 2 라운드 Feistel 복호 수단 또는 1 라운드 Feistel 복호 수단으로서 동작한다. 또한, 복호 검증용 태그 계산 수단(204)은, 암호문의 사이즈에 따라, 제2 복호 검증용 태그 계산 수단 또는 제3 복호 검증용 태그 계산 수단으로서 동작한다.
각 실시 형태에 있어서 데이터 관련 인증 암호(AEAD: authenticated encryption with associated data)에 대응하기 위해서는, 입력에 헤더 H를 추가한 다음, 임의의 가변 길이 입력의 의사 랜덤 함수 g_K'(*)을 준비하고, 생성된 인증 태그(T 또는 T')와, 상기 임의의 가변 길이 입력의 의사 랜덤 함수g_K'(H)로부터의 출력과의 배타적 논리합을 최종적인 인증 태그(T2 또는 T2')로서 가정할 수 있다. 즉, 암호화 처리에서는, 상술한 바와 같이 인증 태그 T를 구한 뒤에, g_K'(*)을 사용해서 최종적인 인증 태그 T2을 T2 = T xor g_K'(H)로서 구할 수 있다. 그 다음, 암호화의 결과는, (N, C, H, T2)로서 가정될 수 있다. 복호 처리에서는, 상술한 바와 같이 복호 검증용 인증 태그 T’를 구한 뒤에, g_K'(*)을 사용해서 최종적인 복호 검증용 인증 태그 T2' = T' xor g_K(H)을 구하여, 수신한 T2과 일치하는 지를 판정한다.
여기서, K'은 2 변수 입력의 의사 랜덤 함수 F_K(*,*)의 키와는 독립적으로 선택된 키이다. 이 경우, 처리 전체의 키는 (K, K')의 쌍이다.
가변 길이 입력의 의사 랜덤 함수 g_K'은, 예를 들어 CMAC 또는 HMAC에 의해 실현 가능하다. CMAC 또는 HMAC은 키를 사용해서 임의의 입력을 고정 길이의 출력으로 단축하는 암호화 함수이다. 예를 들어, CMAC은, 키 K'를 갖는 블록 함수 E_K'를 사용해서 헤더 H의 각 블록(예를 들어, H[1], ..., H[h])에 대하여 CBC_MAC라고 불리는 연쇄 처리와, 종단부 처리로 구성되어 있다.
구체예로서, 사용될 블록 암호가 n-bit 블록을 채택할 때, 다음의 처리가:
Y[0] = 00..0,
Y[i] = E_K'(H[1] xor Y[i-1]), 여기서 i=1, 2, ..., (h-1)
Y[h] = E_K'(H[h] xor Y[i-1] xor 2*E_K'(00..0)), H[h]이 n-bit인 경우
Y[h] = E_K'((H[h]||10*) xor Y[h-1] xor 4*E_K'(00..0)), H[h]이 n-bit 미만인 경우가 행해진다. 2* 및 4*은 유한체 상의 상수에 의한 승산 처리를 나타내고 있다.
이하, 본 발명의 최소의 구성에 대해서 설명한다. 도 17은 본 발명에 의한 인증 암호 장치의 최소의 구성예를 도시하는 블록도이다. 도 17에 도시한 바와 같이, 본 발명에 의한 인증 암호 장치는, 최소의 구성 요소로서 인증 암호 수단(60)을 포함한다.
도 17에 나타내는 인증 암호 장치에서는, 인증 암호 수단(60)은, 입력된 평문 또는 암호문에 대하여, 2 블록 단위로 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서, 암호문 또는 복호된 평문을 생성한다.
최소 구성의 인증 암호 장치에 의하면, 암호화 함수를 암호화 처리와 복호 처리에 대하여 한 방향으로만 사용하고, 따라서 병렬 처리를 행할 수 있고, 1개의 암호화 함수만으로 전체의 암호화와 복호의 처리를 행할 수 있는 1 패스 및 1 레이트 인증 암호를 실현할 수 있다.
도 18의 (a) 및 18의 (b)는, 예로서 인증 암호 수단(60)의 보다 구체적인 구성예를 도시하는 블록도이며, 여기서 도 18의 (a)는 인증 암호 장치를 암호화 장치로 가정할 경우의 인증 암호 수단(60)의 구성예를 나타내고, 도 18의 (b)는 인증 암호 장치를 복호 장치로 가정할 경우의 인증 암호 수단(60)의 구성예를 나타내고 있다.
도 18의 (a)에 도시한 바와 같이, 인증 암호 수단(60)은, 암호화 수단(61)(예를 들어, 암호화 수단(10))을 포함하고, 암호화 수단(61)은, 평문 입력 수단(611)과, 보조 변수 생성 수단(612)과, 2 라운드 Feistel 암호화 수단(613)과, 태그 계산 수단(614)을 가질 수 있다.
평문 입력 수단(611)(예를 들어, 입력 수단(101))은, 암호화될 평문과 초기 벡터를 입력한다.
보조 변수 생성 수단(612)(예를 들어, 보조 변수 생성 수단(102))은, 초기 벡터와 입력된 평문의 사이즈에 기초하여, 암호화 함수의 각각에 부여하는 보조 변수를 생성한다.
2 라운드 Feistel 암호화 수단(613)(예를 들어, 2 라운드 Feistel 암호화 수단(103))은, 평문을 2 블록마다의 청크들로 나누었을 때의 각 평문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 해당 평문 청크에 대응하는 암호문 청크를 생성한다.
초기 벡터를 N, 청크 인덱스를 i, i번째의 평문 청크를 MC[i] = (M[i_1], M[i_2]), 해당 평문 청크 MC[i]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N,Tw_i_1)와 (N,Tw_i_2),그리고 암호화 함수를 F_K(*,*)로 가정하면, 2 라운드 Feistel 암호화 수단(613)은, i번째의 암호문 청크 CC[i] = (C[i_1], C[i_2])를 다음과 같이:
C[i_1] = F_K((N,Tw_i_1), M[i_1]) xor M[i_2],
C[i_2] = F_K((N,Tw_i_2), C[i_1]) xor M[i_1]
로 구할 수 있다.
태그 계산 수단(614)(예를 들어, 태그 계산 수단(104))은, 평문 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서, 인증 태그를 생성한다.
태그 계산 수단(614)은, 평문 체크섬을, 각 평문 청크에 포함되는 평문 블록 M[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를, T = F_K((N, Tw_T_1), SUM)로서 구할 수 있다.
도 18의 (b)에 도시한 바와 같이, 인증 암호 수단(60)은, 복호 수단(62)(예를 들어, 복호 수단(20))을 포함하고, 복호 수단(62)은, 암호문 입력 수단(621)과, 복호용 보조 변수 생성 수단(622)과, 2 라운드 Feistel 복호 수단(623)과, 복호 검증용 태그 계산 수단(624)과, 판정 수단(625)을 가질 수 있다.
암호문 입력 수단(621)(예를 들어, 입력 수단(201))은, 복호될 암호문, 초기 벡터, 및 인증 태그를 입력한다.
복호용 보조 변수 생성 수단(622)(예를 들어, 보조 변수 생성 수단(202))은, 초기 벡터와 입력된 암호문의 사이즈에 기초하여, 암호화 함수의 각각에 부여하는, 암호화 시에서와 동일한 보조 변수를 생성한다.
2 라운드 Feistel 복호 수단(623)(예를 들어, 2 라운드 Feistel 복호 수단(203))은, 암호문을 2 블록마다의 청크들로 나누었을 때의 각 암호문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 암호문 청크에 대응하는 복호된 평문 청크를 생성한다.
초기 벡터를 N, 청크 인덱스를 i, i번째의 암호문 청크를 CC[i] = (C[i_1], C[i_2]), 암호문 청크 CC[i]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N,Tw_i_1)와 (N,Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 2 라운드 Feistel 복호 수단(623)은, i번째의 복호된 평문 청크 MC'[i] = (M'[i_1], M'[i_2])를,
M'[i_1] = F_K((N,Tw_i_2), C[i_1]) xor C[i_2],
M'[i_2] = F_K((N,Tw_i_1), M'[i_1]) xor C[i_1]
로 구할 수 있다.
복호 검증용 태그 계산 수단(624)(예를 들어, 복호 검증용 태그 계산 수단(204))은, 복호된 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서, 복호 검증용 인증 태그를 생성한다.
복호 검증용 태그 계산 수단(624)은, 복호된 평문 체크섬을, 복호된 각 평문 청크에 포함되는 복호된 각 평문 블록 M’[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를, T' = F_K((N, Tw_T_1), SUM')로 구할 수 있다.
판정 수단(625)(예를 들어, 판정 수단(205))은, 복호 검증용 태그 계산 수단(624)이 생성한 복호 검증용 인증 태그와 입력된 인증 태그에 기초하여, 복호의 성공 또는 실패를 판정한다.
이상, 실시 형태 및 실시예를 참조하여 본원 발명을 설명했지만, 본원 발명은 상기 실시 형태에 한정되는 것은 아니다. 본원 발명의 구성 및 상세는, 본원 발명의 범위 내에서 본 분야의 숙련자가 이해할 수 있는 여러 변형을 할 수 있다.
상기의 실시 형태의 일부 또는 전부는, 이하의 부기에서와 같이 기재될 수 있지만, 이하에는 한정되지 않는다.
(부기 1) 입력된 평문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문을 생성하는 암호화 수단을 포함하는 암호화 장치.
(부기 2) 부기 1에 따른 암호화 장치로서, 암호화 수단은, 암호화될 평문과 초기 벡터를 입력하는 평문 입력 수단과, 초기 벡터와 입력된 평문의 사이즈에 기초하여, 암호화 함수의 각각에 부여하는 보조 변수를 생성하는 보조 변수 생성 수단과, 평문을 2 블록마다의 청크들로 나누었을 때의 각 평문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 해당 평문 청크에 대응하는 암호문 청크를 생성하는 2 라운드 Feistel 암호화 수단과, 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서, 인증 태그를 생성하는 태그 계산 수단을 포함하고, 2 라운드 Feistel 암호화 수단은, 초기 벡터를 N, 청크 인덱스를 i, i번째의 평문 청크를 MC[i] = (M[i_1], M[i_2]), 평문 청크 MC[i]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, i번째의 암호문 청크 CC[i] = (C[i_1], C[i_2])를,
C[i_1] = F_K((N, Tw_i_1), M[i_1]) xor M[i_2],
C[i_2] = F_K((N, Tw_i_2), C[i_1]) xor M[i_1]
로 구하고, 태그 계산 수단은, 평문의 체크섬을, 각 평문 청크에 포함되는 평문 블록 M[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_1), SUM)
로 구하는 암호화 장치.
(부기 3) 부기 2에 따른 암호화 장치로서, 입력된 평문이 짝수의 블록들로 분할되고 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 보조 변수 생성 수단은, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 제2 인증 태그용 보조 변수를 생성하고,
암호화 수단은,
최종 평문 블록을 포함하는 최종 평문 청크에 대하여, 미리 결정된 2 라운드 Feistel 구조를 적용하여, 최종 암호문 블록을 포함하는 최종 암호문 청크를 생성하는 제2의 2 라운드 Feistel 암호화 수단; 및
평문의 체크섬을, 입력된 평문과, 제2의 2 라운드 Feistel 암호화 수단으로부터의 출력을 사용해서 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서, 인증 태그를 생성하는 제2 태그 계산 수단을 포함하고,
최종 평문 청크의 인덱스를 m, 최종 평문 블록을 M[m_2], 최종 평문 청크를 MC[m] = (M[m_1], M[m_2]), 최종 평문 청크 MC[m]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_m_1)과 (N, Tw_m_2), 암호화 함수를 F_K(*,*), 최종 평문 블록의 사이즈를 s, 블록 사이즈를 n, s 사이즈로부터 n 사이즈까지의 패딩 처리를 pad_n(), 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, 제2의 2 라운드 Feistel 암호화 수단은, s 사이즈의 최종 암호문 블록 C[m_2]을 포함하는 최종 암호문 청크 CC[m] = (C[m_1], C[m_2])을,
C[m_2] = cut_s(Z) xor M[m_2],
C[m_1] = F_K((N, Tw_m_2), pad_n (C[m_2])) xor M[m_1]
여기서, Z = F_K((N, Tw_m_1), M[m_1])
로 구하고, 제2 태그 계산 수단은, 평문의 체크섬을, 최종 평문 청크를 제외한 각 평문 청크에 포함되는 평문 블록 M[i_2]과, Z와, C[m_2]을 n 사이즈로 패딩함으로써 얻어진 C_n[m_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 제2 인증 태그용 보조 변수를 (N, Tw_T_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_2), SUM)
로 구하는 암호화 장치.
(부기 4) 부기 2 또는 부기 3에 따른 암호화 장치로서, 보조 변수 생성 수단은, 입력된 평문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈와 동일한 경우에, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 제3 인증 태그용 보조 변수를 생성하고, 입력된 평문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 제4 인증 태그용 보조 변수를 생성하고, 암호화 수단은, 최종 평문 블록을 포함하는 최종 평문 청크에 대하여, 미리 결정된 1 라운드 Feistel 구조를 적용하여, 최종 암호문 블록을 포함하는 최종 암호문 청크를 생성하는 1 라운드 Feistel 암호화 수단과, 평문의 체크섬을, 입력된 평문과, 1 라운드 Feistel 암호화 수단으로부터의 출력을 사용해서 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서, 인증 태그를 생성하는 제3 태그 계산 수단을 포함하고, 1 라운드 Feistel 암호화 수단은, 최종 평문 청크의 인덱스를 m, 최종 평문 블록을 M[m_1], 최종 평문 청크를 MC[m] = (M[m_1]), 최종 평문 블록에 대응하는 보조 변수를 (N, Tw_m_1), 암호화 함수를 F_K(*,*), 최종 평문 블록의 사이즈를 s, 블록 사이즈를 n, 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, s 사이즈의 최종 암호문 블록 C[m_1]을 포함하는 최종 암호문 청크 CC[m] = (C[m_1])을,
C[m_1] = cut_s(F_K((N, Tw_m_1), 0^n)) xor M[m_1]
로 구하고, 여기서, s = n이면, cut_s()은 생략 가능하고,
제3 태그 계산 수단은, s = n이라면, 평문의 체크섬을, 최종 평문 청크를 제외한 각 평문 청크에 포함되는 평문 블록 M[i_2]과, C[m_1]을 사용해서 구하고, 결과적인 체크섬을 SUM, 제3 인증 태그용 보조 변수를 (N, Tw_T_3), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_3), SUM)
로 구하고, s < n이라면, 평문의 체크섬을, 최종 평문 청크를 제외한 각 평문 청크에 포함되는 평문 블록 M[i_2]과, C[m_1]을 n 사이즈로 패딩함으로써 얻어진 C_n[m_1]을 사용해서 구하고, 결과적인 체크섬을 SUM, 제4 인증 태그용 보조 변수를 (N, Tw_T_4), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_4), SUM)
로 구하는 암호화 장치.
(부기 5) 부기 1 내지 부기 4 중 어느 하나에 따른 암호화 장치로서, 암호화 함수가, Tweak라고 불리는 보조 변수를 포함하는 2 변수 입력의 Tweakable 블록 암호인 암호화 장치.
(부기 6) 부기 1 내지 부기 4 중 어느 하나에 따른 암호화 장치로서, 암호화 함수가, 제1 변수와 제2 변수의 결합된 입력을 갖는 키(keyed) 해시 함수인 암호화 장치.
(부기 7) 복호 장치로서, 입력된 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서, 복호된 평문을 생성하는 복호 수단을 포함하는 복호 장치.
(부기 8) 부기 7에 따른 복호 장치로서, 복호 수단은, 복호될 암호문, 초기 벡터 및 인증 태그를 입력하는 암호문 입력 수단과, 초기 벡터와 입력된 암호문의 사이즈에 기초하여, 암호화 함수의 각각에 부여하는 암호화 시에서와 동일한 보조 변수를 생성하는 복호용 보조 변수 생성 수단과, 암호문을 2 블록마다의 청크들로 나누었을 때의 각 암호문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써 암호문 청크에 대응하는 복호된 평문 청크를 생성하는 2 라운드 Feistel 복호 수단과, 복호된 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서 복호 검증용 인증 태그를 생성하는 복호 검증용 태그 계산 수단과, 복호 검증용 태그 계산 수단이 생성한 복호 검증용 인증 태그와 입력된 인증 태그에 기초하여, 복호의 성공 또는 실패를 판정하는 판정 수단을 포함하고,
2 라운드 Feistel 복호 수단은, 초기 벡터를 N, 청크 인덱스를 i, i번째의 암호문 청크를 CC[i] = (C[i_1], C[i_2]), 암호문 청크 CC[i]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, i번째의 복호된 평문 청크 MC’[i] = (M’[i_1], M’[i_2])을,
M’[i_1] = F_K((N, Tw_i_2), C[i_1]) xor C[i_2],
M’[i_2] = F_K((N, Tw_i_1), M’[i_1]) xor C[i_1]
로 구하고, 복호 검증용 태그 계산 수단은, 복호된 평문의 체크섬을, 복호된 각 평문 청크에 포함되는 복호된 각 평문 블록 M’[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
T' = F_K((N, Tw_T_1), SUM')
로 구하는 복호 장치.
(부기 9) 부기 8에 따른 복호 장치로서, 입력된 암호문이 짝수의 블록들로 분할되고 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 복호용 보조 변수 생성 수단은, 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 암호화 시에서와 동일한 제2의 인증 태그용 보조 변수를 생성하고, 복호 수단은,
최종 암호문 블록을 포함하는 최종 암호문 청크에 대하여, 미리 결정된 2 라운드 Feistel 구조를 적용하여, 최종 암호 블록의 복호된 평문 블록을 포함하는 최종 복호된 평문 청크를 생성하는 제2의 2 라운드 Feistel 복호 수단; 및
복호된 평문의 체크섬을, 2 라운드 Feistel 복호 수단으로부터의 출력과, 제2의 2 라운드 Feistel 복호 수단으로부터의 출력과, 최종 암호문 블록을 사용해서 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서, 복호 검증용 인증 태그를 생성하는 제2 복호 검증용 태그 계산 수단을 포함하고,
최종 암호문 청크의 인덱스를 m, 최종 암호문 블록을 C[m_2], 최종 암호문 청크를 CC[m] = (C[m_1], C[m_2]), 최종 암호문 청크 CC[m]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_m_1)과 (N, Tw_m_2), 암호화 함수를 F_K(*,*), 최종 암호문 블록의 사이즈를 s, 블록 사이즈를 n, s 사이즈로부터 n 사이즈까지의 패딩 처리를 pad_n(), 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, 제2의 2 라운드 Feistel 복호 수단은, s 사이즈의 최종 복호된 평문 블록 M’[m_2]을 포함하는 최종 복호된 평문 청크 MC’[m] = (M’[m_1], M’[m_2])를,
M’[m_1] = F_K((N, Tw_m_2), pad_n (C[m_2])) xor C[m_1],
M’[m_2] = cut_s(Z') xor C[m_2]
로 구하고,
여기서, Z' = F_K((N, Tw_m_1), M’[m_1])이고,
제2 복호 검증용 태그 계산 수단은, 복호된 평문의 체크섬을, 최종 복호된 평문 청크를 제외한 복호된 각 평문 청크에 포함되는 복호된 평문 블록 M[i_2]과, Z'와, M’[m_2]을 n 사이즈로 패딩하여 얻은 M_n’[m_2]을 사용해서 계산하고,
결과적인 체크섬을 SUM', 제2 인증 태그용 보조 변수를 (N, Tw_T_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
T' = F_K((N, Tw_T_2), SUM')
로 구하는 복호 장치.
(부기 10) 부기 8 또는 부기 9에 따른 복호 장치로서, 보조 변수 생성 수단은, 입력된 암호문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈와 동일한 경우에, 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 암호화 시에서와 동일한 제3 인증 태그용 보조 변수를 생성하고, 입력된 암호문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 암호화 시에서와 동일한 제4 인증 태그용 보조 변수를 생성하고, 복호 수단은, 최종 암호문 블록을 포함하는 최종 암호문 청크에 대하여, 미리 결정된 1 라운드 Feistel 구조를 적용하여, 최종 복호된 평문 블록을 포함하는 최종 평문 청크를 생성하는 1 라운드 Feistel 복호 수단과, 복호된 평문의 체크섬을, 2 라운드 Feistel 복호 수단으로부터의 출력과, 1 라운드 Feistel 복호 수단으로부터의 출력을 사용해서 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서, 복호 검증용 인증 태그를 생성하는 제3 복호 검증용 태그 계산 수단을 포함하고, 1 라운드 Feistel 복호 수단은, 최종 암호문 청크의 인덱스를 m, 최종 암호문 블록을 C[m_1], 최종 암호문 청크를 CC[m] = (C[m_1]), 최종 암호문 블록에 대응하는 보조 변수를 (N, Tw_m_1), 암호화 함수를 F_K(*,*), 최종 암호문 블록의 사이즈를 s, 블록 사이즈를 n, 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, s 사이즈의 최종 복호된 평문 블록 M’[m_1]을 포함하는 최종 복호된 평문 청크 MC’[m] = (M’[m_1])을,
M’[m_1] = cut_s(F_K((N, Tw_m_1), 0^n)) xor [m_1]
로 구하고,
여기서, s = n이면, cut_s()은 생략 가능하고,
제3 복호 검증용 태그 계산 수단은, s = n이라면, 복호된 평문의 체크섬을, 최종 복호된 평문 청크를 제외한 복호된 각 평문 청크에 포함되는 평문 블록 M’[i_2]과, M’[m_1]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 제3 인증 태그용 보조 변수를 (N, Tw_T_3), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
T' = F_K((N, Tw_T_3), SUM')
로 구하고, s < n이라면, 복호된 평문의 체크섬을, 최종 복호된 평문 청크를 제외한 복호된 각 평문 청크에 포함되는 평문 블록 M’[i_2]과, M’[m_1]을 n 사이즈로 패딩하여 얻은 M_n’[m_1]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 제4 인증 태그용 보조 변수를 (N, Tw_T_4), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
T' = F_K((N, Tw_T_4), SUM')
로 구하는 복호 장치.
(부기 11) 부기 7 내지 부기 10 중 어느 하나에 따른 복호 장치로서, 암호화 함수가, Tweak라고 불리는 보조 변수를 포함하는 2 변수 입력의 Tweakable 블록 암호인 복호 장치.
(부기 12) 부기 7 내지 부기 10 중 어느 하나에 따른 복호 장치로서, 암호화 함수가, 제1 변수와 제2 변수의 결합된 입력을 갖는 키(keyed) 해시 함수인 복호 장치.
(부기 13) 인증 암호 방법으로서, 암호화될 평문과 초기 벡터를 입력하고, 초기 벡터와 입력된 평문의 사이즈에 기초하여, 암호화 함수의 각각에 부여하는 보조 변수를 생성하고, 평문을 2 블록마다의 청크들로 나누었을 때의 각 평문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 평문 청크에 대응하는 암호문 청크를 생성하는 2 라운드 Feistel 암호화 처리에 있어서, 정보 처리 장치가, 초기 벡터를 N, 청크 인덱스를 i, i번째의 평문 청크를 MC[i] = (M[i_1], M[i_2]), 평문 청크 MC[i]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, i번째의 암호문 청크 CC[i] = (C[i_1], C[i_2])을,
C[i_1] = F_K((N, Tw_i_1), M[i_1]) xor M[i_2],
C[i_2] = F_K((N, Tw_i_2), C[i_1]) xor M[i_1]
로 구하고, 평문의 체크섬을, 각 평문 청크에 포함되는 평문 블록 M[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_1), SUM)
로 구하는 인증 암호 방법.
(부기 14) 부기 13에 따른 인증 암호 방법으로서, 입력된 평문이 짝수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 제2 인증 태그용 보조 변수를 생성하고, 최종 평문 블록을 포함하는 최종 평문 청크에 대하여, 미리 결정된 2 라운드 Feistel 구조를 적용하여, 최종 암호문 블록을 포함하는 최종 암호문 청크를 생성하는 제2의 2 라운드 Feistel 암호화 처리에 있어서, 정보 처리 장치가, 최종 평문 청크의 인덱스를 m, 최종 평문 블록을 M[m_2], 최종 평문 청크를 MC[m] = (M[m_1], M[m_2]), 최종 평문 청크 MC[m]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_m_1)과 (N, Tw_m_2), 암호화 함수를 F_K(*,*), 최종 평문 블록의 사이즈를 s, 블록 사이즈를 n, s 사이즈로부터 n 사이즈까지의 패딩 처리를 pad_n(), 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, s 사이즈의 최종 암호문 블록 C[m_2]을 포함하는 최종 암호문 청크 CC[m] = (C[m_1], C[m_2])을,
C[m_2] = cut_s(Z) xor M[m_2],
C[m_1] = F_K((N, Tw_m_2), pad_n (C[m_2])) xor M[m_1]
로 구하고,
여기서, Z = F_K((N, Tw_m_1), M[m_1])이고,
평문의 체크섬을, 최종 평문 청크를 제외한 각 평문 청크에 포함되는 평문 블록 M[i_2]과, Z와, C[m_2]을 n 사이즈로 패딩하여 얻은 C_n[m_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 제2 인증 태그용 보조 변수를 (N, Tw_T_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_2), SUM)
로 구하는 인증 암호 방법.
(부기 15) 부기 13 또는 부기 14에 따른 인증 암호 방법으로서, 입력된 평문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈와 동일한 경우에, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 제3 인증 태그용 보조 변수를 생성하고, 입력된 평문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 제4 인증 태그용 보조 변수를 생성하고, 최종 평문 블록을 포함하는 최종 평문 청크에 대하여, 미리 결정된 1 라운드 Feistel 구조를 적용하여, 최종 암호문 블록을 포함하는 최종 암호문 청크를 생성하는 1 라운드 Feistel 암호화 처리에 있어서, 최종 평문 청크의 인덱스를 m, 최종 평문 블록을 M[m_1], 최종 평문 청크를 MC[m] = (M[m_1]), 최종 평문 블록에 대응하는 보조 변수를 (N, Tw_m_1), 암호화 함수를 F_K(*,*), 최종 평문 블록의 사이즈를 s, 블록 사이즈를 n, 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, s 사이즈의 최종 암호문 블록 C[m_1]을 포함하는 최종 암호문 청크 CC[m] = (C[m_1])을,
C[m_1] = cut_s(F_K((N, Tw_m_1), 0^n)) xor M[m_1]
로 구하고,
여기서, s = n이면, cut_s()은 생략 가능하고,
s = n이라면, 평문의 체크섬을, 최종 평문 청크를 제외한 각 평문 청크에 포함되는 평문 블록 M[i_2]과, C[m_1]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 제3 인증 태그용 보조 변수를 (N, Tw_T_3), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_3), SUM)
로 구하고, s < n이라면, 평문의 체크섬을, 최종 평문 청크를 제외한 각 평문 청크에 포함되는 평문 블록 M[i_2]과, C[m_1]을 n 사이즈로 패딩하여 얻은 C_n[m_1]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 제4 인증 태그용 보조 변수를 (N, Tw_T_4), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_4), SUM)
로 구하는 인증 암호 방법.
(부기 16) 인증 암호 방법으로서, 복호될 암호문과 초기 벡터와 인증 태그를 입력하고, 초기 벡터와 입력된 암호문의 사이즈에 기초하여, 암호화 함수의 각각에 부여하는 암호화 시에서와 동일한 보조 변수를 생성하고, 암호문을 2 블록마다의 청크들로 나누었을 때의 각 암호문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 암호문 청크에 대응하는 복호된 평문 청크를 생성하는 2 라운드 Feistel 복호 처리에 있어서, 정보 처리 장치가, 초기 벡터를 N, 청크 인덱스를 i, i번째의 암호문 청크를 CC[i] = (C[i_1], C[i_2]), 암호문 청크 CC[i]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, i번째의 복호된 평문 청크 MC’[i] = (M’[i_1], M’[i_2])을,
M’[i_1] = F_K((N, Tw_i_2), C[i_1]) xor C[i_2],
M’[i_2] = F_K((N, Tw_i_1), M’[i_1]) xor C[i_1]
로 구하고, 복호된 평문의 체크섬을, 복호된 각 평문 청크에 포함되는 복호된 각 평문 블록 M’[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
T' = F_K((N, Tw_T_1), SUM')
로 구하는 인증 암호 방법.
(부기 17) 부기 16에 따른 인증 암호 방법으로서, 입력된 암호문이 짝수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 암호화 시에서와 동일한 제2의 인증 태그용 보조 변수를 생성하고, 최종 암호문 블록을 포함하는 최종 암호문 청크에 대하여, 미리 결정된 2 라운드 Feistel 구조를 적용하여, 최종 암호 블록의 복호된 평문 블록을 포함하는 최종 복호된 평문 청크를 생성하는 제2의 2 라운드 Feistel 복호 처리에 있어서, 방법은, 최종 암호문 청크의 인덱스를 m, 최종 암호문 블록을 C[m_2], 최종 암호문 청크를 CC[m] = (C[m_1], C[m_2]), 최종 암호문 청크 CC[m]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_m_1)과 (N, Tw_m_2), 암호화 함수를 F_K(*,*), 최종 암호문 블록의 사이즈를 s, 블록 사이즈를 n, s 사이즈로부터 n 사이즈까지의 패딩 처리를 pad_n(), 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, s 사이즈의 최종 복호된 평문 블록 M’[m_2]을 포함하는 최종 복호된 평문 청크 MC’[m] = (M’[m_1], M’[m_2])을,
M’[m_1] = F_K((N, Tw_m_2), pad_n (C[m_2])) xor C[m_1],
M’[m_2] = cut_s(Z') xor C[m_2]
로 구하고,
여기서, Z' = F_K((N, Tw_m_1), M’[m_1])이고,
복호된 평문의 체크섬을, 최종 복호된 평문 청크를 제외한 복호된 각 평문 청크에 포함되는 복호된 평문 블록 M[i_2]과, Z'과, M’[m_2]을 n 사이즈로 패딩하여 얻은 M_n’[m_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 제2 인증 태그용 보조 변수를 (N, Tw_T_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
T' = F_K((N, Tw_T_2), SUM')
로 구하는 인증 암호 방법.
(부기 18) 부기 16 또는 부기 17에 따른 인증 암호 방법으로서, 입력된 암호문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈와 동일한 경우에, 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 암호화 시에서와 동일한 제3 인증 태그용 보조 변수를 생성하고, 입력된 암호문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 암호화 시에서와 동일한 제4 인증 태그용 보조 변수를 생성하고, 최종 암호문 블록을 포함하는 최종 암호문 청크에 대하여, 미리 결정된 1 라운드 Feistel 구조를 적용하여, 최종 복호된 평문 블록을 포함하는 최종 평문 청크를 생성하는 1 라운드 Feistel 복호 처리에 있어서, 방법은, 최종 암호문 청크의 인덱스를 m, 최종 암호문 블록을 C[m_1], 최종 암호문 청크를 CC[m] = (C[m_1]), 최종 암호문 블록에 대응하는 보조 변수를 (N, Tw_m_1), 암호화 함수를 F_K(*,*), 최종 암호문 블록의 사이즈를 s, 블록 사이즈를 n, 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, s 사이즈의 최종 복호된 평문 블록 M’[m_1]을 포함하는 최종 복호된 평문 청크 MC’[m] = (M’[m_1])을,
M’[m_1] = cut_s(F_K((N, Tw_m_1), 0^n)) xor [m_1]
로 구하고,
여기서, s = n이면, cut_s()은 생략 가능하고,
s = n이라면, 복호된 평문의 체크섬을, 최종 복호된 평문 청크를 제외한 복호된 각 평문 청크에 포함되는 평문 블록 M’[i_2]과, M’[m_1]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 제3 인증 태그용 보조 변수를 (N, Tw_T_3), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
T' = F_K((N, Tw_T_3), SUM')
로 구하고, s < n이라면, 복호된 평문의 체크섬을, 최종 복호된 평문 청크를 제외한 복호된 각 평문 청크에 포함되는 평문 블록 M’[i_2]과, M’[m_1]을 n 사이즈로 패딩하여 얻은 M_n’[m_1]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 제4 인증 태그용 보조 변수를 (N, Tw_T_4), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
T' = F_K((N, Tw_T_4), SUM')
로 구하는 인증 암호 방법.
(부기 19) 부기 13 내지 부기 18 중 어느 하나에 따른 인증 암호 방법으로서, 암호화 함수가, Tweak라고 불리는 보조 변수를 포함하는 2 변수 입력의 Tweakable 블록 암호인 인증 암호 방법.
(부기 20) 부기 13 내지 부기 18 중 어느 하나에 따른 인증 암호 방법으로서, 암호화 함수가, 제1 변수와 제2 변수의 결합된 입력을 갖는 키(keyed) 해시 함수인 인증 암호 방법.
(부기 21) 인증 암호용 프로그램으로서, 컴퓨터에, 암호화될 평문과 초기 벡터를 입력하는 평문 입력 처리, 초기 벡터와 입력된 평문의 사이즈에 기초하여, 암호화 함수의 각각에 부여하는 보조 변수를 생성하는 보조 변수 생성 처리, 평문을 2 블록마다의 청크들로 나누었을 때의 각 평문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 평문 청크에 대응하는 암호문 청크를 생성하는 2 라운드 Feistel 암호화 처리, 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서 인증 태그를 생성하는 태그 계산 처리를 실행시키고, 2 라운드 Feistel 암호화 처리에서, 초기 벡터를 N, 청크 인덱스를 i, i번째의 평문 청크를 MC[i] = (M[i_1], M[i_2]), 평문 청크 MC[i]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, i번째의 암호문 청크 CC[i] = (C[i_1], C[i_2])을,
C[i_1] = F_K((N, Tw_i_1), M[i_1]) xor M[i_2],
C[i_2] = F_K((N, Tw_i_2), C[i_1]) xor M[i_1]
로 구하고, 태그 계산 처리에서, 평문의 체크섬을, 각 평문 청크에 포함되는 평문 블록 M[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_1), SUM)
로 구하는 인증 암호용 프로그램.
(부기 22) 부기 21에 따른 인증 암호용 프로그램으로서, 컴퓨터에, 보조 변수 생성 처리에서, 입력된 평문이 짝수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 제2 인증 태그용 보조 변수를 생성시키고, 2 라운드 Feistel 암호화 처리에서, 최종 평문 청크의 인덱스를 m, 최종 평문 블록을 M[m_2], 최종 평문 청크를 MC[m] = (M[m_1], M[m_2]), 최종 평문 청크 MC[m]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_m_1)과 (N, Tw_m_2), 암호화 함수를 F_K(*,*), 최종 평문 블록의 사이즈를 s, 블록 사이즈를 n, s 사이즈로부터 n 사이즈까지의 패딩 처리를 pad_n(), 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, s 사이즈의 최종 암호문 블록 C[m_2]을 포함하는 최종 암호문 청크 CC[m] = (C[m_1], C[m_2])을,
C[m_2] = cut_s(Z) xor M[m_2],
C[m_1] = F_K((N, Tw_m_2), pad_n (C[m_2])) xor M[m_1]
여기서, Z = F_K((N, Tw_m_1), M[m_1])
로 구하고, 제2 태그 계산 처리에서, 평문의 체크섬을, 최종 평문 청크를 제외한 각 평문 청크에 포함되는 평문 블록 M[i_2]과, Z와, C[m_2]을 n 사이즈로 패딩하여 얻은 C_n[m_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 제2 인증 태그용 보조 변수를 (N, Tw_T_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_2), SUM)
로 구하는 인증 암호용 프로그램.
(부기 23) 부기 21 또는 부기 22에 따른 인증 암호용 프로그램으로서, 컴퓨터에, 보조 변수 생성 처리에서, 입력된 평문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈와 동일한 경우에, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 제3 인증 태그용 보조 변수를 생성시키고, 입력된 평문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 제4 인증 태그용 보조 변수를 생성시키고, 2 라운드 Feistel 암호화 처리에서, 최종 평문 청크의 인덱스를 m, 최종 평문 블록을 M[m_1], 최종 평문 청크를 MC[m] = (M[m_1]), 최종 평문 블록에 대응하는 보조 변수를 (N, Tw_m_1), 암호화 함수를 F_K(*,*), 최종 평문 블록의 사이즈를 s, 블록 사이즈를 n, 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, s 사이즈의 최종 암호문 블록 C[m_1]을 포함하는 최종 암호문 청크 CC[m] = (C[m_1])을,
C[m_1] = cut_s(F_K((N, Tw_m_1), 0^n)) xor M[m_1]
로 구하고,
여기서, s = n이면, cut_s()은 생략 가능하고,
태그 계산 처리에서, s = n이라면, 평문의 체크섬을, 최종 평문 청크를 제외한 각 평문 청크에 포함되는 평문 블록 M[i_2]과, C[m_1]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 제3 인증 태그용 보조 변수를 (N, Tw_T_3), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_3), SUM)
로 구하고, s < n이라면, 평문의 체크섬을, 최종 평문 청크를 제외한 각 평문 청크에 포함되는 평문 블록 M[i_2]과, C[m_1]을 n 사이즈로 패딩하여 얻은 C_n[m_1]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 제4 인증 태그용 보조 변수를 (N, Tw_T_4), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
T = F_K((N, Tw_T_4), SUM)
로 구하는 인증 암호용 프로그램.
(부기 24) 인증 암호용 프로그램으로서, 컴퓨터에, 복호될 암호문과 초기 벡터와 인증 태그를 입력하는 암호문 입력 처리, 초기 벡터와 입력된 암호문의 사이즈에 기초하여, 암호화 함수의 각각에 부여하는, 암호화 시에서와 동일한 보조 변수를 생성하는 복호용 보조 변수 생성 처리, 암호문을 2 블록마다의 청크들로 나누었을 때의 각 암호문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 암호문 청크에 대응하는 복호된 평문 청크를 생성하는 2 라운드 Feistel 복호 처리, 복호된 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서 복호 검증용 인증 태그를 생성하는 복호 검증용 태그 계산 처리, 및 복호 검증용 태그 계산 수단에 의해 생성된 복호 검증용 인증 태그와 입력된 인증 태그에 기초하여, 복호의 성공 또는 실패를 판정하는 판정 처리를 실행시키고, 2 라운드 Feistel 복호 처리에서, 초기 벡터를 N, 청크 인덱스를 i, i번째의 암호문 청크를 CC[i] = (C[i_1], C[i_2]), 암호문 청크 CC[i]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, i번째의 복호된 평문 청크 MC’[i] = (M’[i_1], M’[i_2])을,
M’[i_1] = F_K((N, Tw_i_2), C[i_1]) xor C[i_2],
M’[i_2] = F_K((N, Tw_i_1), M’[i_1]) xor C[i_1]
로 구하고, 복호 검증용 태그 계산 처리에서, 복호된 평문의 체크섬을, 복호된 각 평문 청크에 포함되는 복호된 각 평문 블록 M’[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
T' = F_K((N, Tw_T_1), SUM')
로 구하는 인증 암호용 프로그램.
(부기 25) 부기 24에 따른 인증 암호용 프로그램으로서, 컴퓨터에, 복호용 보조 변수 생성 처리에서, 입력된 암호문이 짝수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 암호화 시에서와 동일한 제2의 인증 태그용 보조 변수를 생성시키고, 2 라운드 Feistel 복호 처리에서, 최종 암호문 청크의 인덱스를 m, 최종 암호문 블록을 C[m_2], 최종 암호문 청크를 CC[m] = (C[m_1], C[m_2]), 최종 암호문 청크 CC[m]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_m_1)과 (N, Tw_m_2), 암호화 함수를 F_K(*,*), 최종 암호문 블록의 사이즈를 s, 블록 사이즈를 n, s 사이즈로부터 n 사이즈까지의 패딩 처리를 pad_n(), 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, s 사이즈의 최종 복호된 평문 블록 M’[m_2]을 포함하는 최종 복호된 평문 청크 MC’[m] = (M’[m_1], M’[m_2])을,
M’[m_1] = F_K((N, Tw_m_2), pad_n (C[m_2])) xor C[m_1],
M’[m_2] = cut_s(Z') xor C[m_2]
로 구하고,
여기서, Z' = F_K((N, Tw_m_1), M’[m_1])이고,
복호 검증용 태그 계산 처리에서, 복호된 평문의 체크섬을, 최종 복호된 평문 청크를 제외한 복호된 각 평문 청크에 포함되는 복호된 평문 블록 M[i_2]과, Z'과, M’[m_2]을 n 사이즈로 패딩하여 얻은 M_n’[m_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 제2 인증 태그용 보조 변수를 (N, Tw_T_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
T' = F_K((N, Tw_T_2), SUM')
로 구하는 인증 암호용 프로그램.
(부기 26) 부기 24 또는 부기 25에 따른 인증 암호용 프로그램으로서, 컴퓨터에, 보조 변수 생성 처리에서, 입력된 암호문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈와 동일한 경우에, 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 암호화 시에서와 동일한 제3 인증 태그용 보조 변수를 생성시키고, 입력된 암호문이 홀수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수로서, 암호화 시에서와 동일한 제4 인증 태그용 보조 변수를 생성시키고, 2 라운드 Feistel 복호 처리에서, 최종 암호문 청크의 인덱스를 m, 최종 암호문 블록을 C[m_1], 최종 암호문 청크를 CC[m] = (C[m_1]), 최종 암호문 블록에 대응하는 보조 변수를 (N, Tw_m_1), 암호화 함수를 F_K(*,*), 최종 암호문 블록의 사이즈를 s, 블록 사이즈를 n, 그리고 n 사이즈로부터 s 사이즈까지의 커팅 처리를 cut_s()로 가정하면, s 사이즈의 최종 복호된 평문 블록 M’[m_1]을 포함하는 최종 복호된 평문 청크 MC’[m] = (M’[m_1])를,
M’[m_1] = cut_s(F_K((N, Tw_m_1), 0^n)) xor [m_1]
로 구하고,
여기서, s = n이면, cut_s()은 생략 가능하고,
복호 검증용 태그 계산 처리에서, s = n이라면, 복호된 평문의 체크섬을, 최종 복호된 평문 청크를 제외한 복호된 각 평문 청크에 포함되는 평문 블록 M’[i_2]과, M’[m_1]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 제3 인증 태그용 보조 변수를 (N, Tw_T_3), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T'를,
T' = F_K((N, Tw_T_3), SUM')
로 구하고, s < n이라면, 복호된 평문의 체크섬을, 최종 복호된 평문 청크를 제외한 복호된 각 평문 청크에 포함되는 평문 블록 M’[i_2]과, M’[m_1]을 n 사이즈로 패딩하여 얻은 M_n’[m_1]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 제4 인증 태그용 보조 변수를 (N, Tw_T_4), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
T' = F_K((N, Tw_T_4), SUM')
로 구하는 인증 암호용 프로그램.
(부기 27) 부기 21 내지 부기 26 중 어느 하나에 따른 인증 암호용 프로그램으로서, 암호화 함수가, Tweak라고 불리는 보조 변수를 포함하는 2 변수 입력의 Tweakable 블록 암호인 인증 암호용 프로그램.
(부기 28) 부기 21 내지 부기 26 중 어느 하나에 따른 인증 암호용 프로그램으로서, 암호화 함수가, 제1 변수와 제2 변수의 결합된 입력을 갖는 키(keyed) 해시 함수인 인증 암호용 프로그램.
이 출원은, 2013년 8월 2일에 출원된 일본 특허 출원 2013-161446을 기초로 하는 우선권을 주장하고, 그 개시의 모두를 여기에 도입한다.
[산업상 이용의 가능성]
본 발명은, 무선 또는 유선의 데이터 통신에 있어서의 암호화와 메시지 인증, 데이터베이스 등 스토리지의 보호와 같은 용도에 적절하게 적용할 수 있다.
30, 60: 인증 암호 수단
10, 61: 암호화 수단
101: 입력 수단
611: 평문 입력 수단
102, 612: 보조 변수 생성 수단
103, 613: 2 라운드 Feistel 암호화 수단
104, 614: 태그 계산 수단
105: 출력 수단
20, 62: 복호 수단
201: 입력 수단
621: 암호문 입력 수단
202: 보조 변수 생성 수단
622: 복호용 보조 변수 생성 수단
203, 623: 2 라운드 Feistel 복호 수단
204, 624: 복호 검증용 태그 계산 수단
205, 625: 판정 수단
206: 출력 수단

Claims (14)

  1. 인증 암호 장치로서,
    입력된 평문 또는 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문 또는 복호된 평문을 생성하고, 입력된 평문 또는 복호된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 상기 암호화 함수를 적용해서 인증 태그를 생성하는 인증 암호 수단을 포함하고,
    상기 인증 암호 수단은 암호화 수단을 포함하고,
    상기 암호화 수단은,
    암호화될 평문과 초기 벡터를 입력하는 평문 입력 수단;
    상기 초기 벡터와 상기 입력된 평문의 사이즈에 기초하여, 상기 암호화 함수의 각각에 부여하는 보조 변수를 생성하는 보조 변수 생성 수단;
    상기 평문을 2 블록마다의 청크들로 나누었을 때의 각 평문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 상기 평문 청크에 대응하는 암호문 청크를 생성하는 2 라운드 Feistel 암호화 수단; 및
    상기 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서 인증 태그를 생성하는 태그 계산 수단을 포함하고,
    상기 2 라운드 Feistel 암호화 수단은, 초기 벡터를 N, 청크 인덱스를 i, i번째의 평문 청크를 MC[i] = (M[i_1], M[i_2]), 상기 평문 청크 MC[i]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, i번째의 암호문 청크 CC[i] = (C[i_1], C[i_2])을,
    C[i_1] = F_K((N, Tw_i_1), M[i_1]) xor M[i_2],
    C[i_2] = F_K((N, Tw_i_2), C[i_1]) xor M[i_1]
    로 구하고,
    상기 태그 계산 수단은, 평문의 체크섬을, 각 평문 청크에 포함되는 평문 블록 M[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
    T = F_K((N, Tw_T_1), SUM)
    로 구하는, 인증 암호 장치.
  2. 인증 암호 장치로서,
    입력된 평문 또는 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문 또는 복호된 평문을 생성하고, 입력된 평문 또는 복호된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 상기 암호화 함수를 적용해서 인증 태그를 생성하는 인증 암호 수단을 포함하고,
    상기 인증 암호 수단은 복호 수단을 포함하고,
    상기 복호 수단은,
    복호될 암호문과 초기 벡터와 인증 태그를 입력하는 암호문 입력 수단;
    상기 초기 벡터와 상기 입력된 암호문의 사이즈에 기초하여, 상기 암호화 함수의 각각에 부여하는, 암호화 시에서와 동일한 보조 변수를 생성하는 복호용 보조 변수 생성 수단;
    상기 암호문을 2 블록마다의 청크들로 나누었을 때의 각 암호문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 상기 암호문 청크에 대응하는 복호된 평문 청크를 생성하는 2 라운드 Feistel 복호 수단;
    상기 복호된 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서 복호 검증용 인증 태그를 생성하는 복호 검증용 태그 계산 수단; 및
    상기 복호 검증용 태그 계산 수단이 생성한 복호 검증용 인증 태그와 상기 입력된 인증 태그에 기초하여, 상기 복호의 성공 또는 실패를 판정하는 판정 수단을 포함하고,
    상기 2 라운드 Feistel 복호 수단은, 초기 벡터를 N, 청크 인덱스를 i, i번째의 암호문 청크를 CC[i] = (C[i_1], C[i_2]), 상기 암호문 청크 CC[i]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, i번째의 복호된 평문 청크 MC’[i] = (M’[i_1], M’[i_2])을,
    M’[i_1] = F_K((N, Tw_i_2), C[i_1]) xor C[i_2],
    M’[i_2] = F_K((N, Tw_i_1), M’[i_1]) xor C[i_1]
    로 구하고,
    상기 복호 검증용 태그 계산 수단은, 복호된 평문의 체크섬을, 복호된 각 평문 청크에 포함되는 복호된 각 평문 블록 M’[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
    T' = F_K((N, Tw_T_1), SUM')
    로 구하는, 인증 암호 장치.
  3. 제1항에 있어서,
    상기 암호화 수단은,
    입력된 평문이 짝수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 최종 평문 블록을 포함하는 최종 평문 청크에 대하여, 미리 결정된 2 라운드 Feistel 구조를 적용하여, 최종 암호문 블록을 포함하는 최종 암호문 청크를 생성하는 제2의 2 라운드 Feistel 암호화 수단; 및
    입력된 평문이 짝수의 블록들로 분할되고, 상기 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 평문의 체크섬을, 입력된 평문과, 상기 제2의 2 라운드 Feistel 암호화 수단으로부터의 출력을 사용해서 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서, 인증 태그를 생성하는 제2 태그 계산 수단을 포함하고,
    상기 제2의 2 라운드 Feistel 암호화 수단은, 상기 최종 평문 청크의 인덱스를 m, 상기 최종 평문 블록을 M[m_2], 상기 최종 평문 청크를 MC[m] = (M[m_1], M[m_2]), 상기 최종 평문 청크 MC[m]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_m_1)과 (N, Tw_m_2), 암호화 함수를 F_K(*,*), 상기 최종 평문 블록의 사이즈를 s, 블록 사이즈를 n, s 비트로부터 n 비트로의 패딩 처리를 pad_n(), 그리고 n 비트로부터 s 비트로의 커팅 처리를 cut_s()로 가정하면, s 비트의 상기 최종 암호문 블록 C[m_2]을 포함하는 상기 최종 암호문 청크 CC[m] = (C[m_1], C[m_2])을,
    C[m_2] = cut_s(Z) xor M[m_2],
    C[m_1] = F_K((N, Tw_m_2), pad_n(C[m_2])) xor M[m_1]
    로 구하고,
    여기서, Z = F_K((N, Tw_m_1), M[m_1])이고,
    상기 제2 태그 계산 수단은, 평문의 체크섬을, 상기 최종 평문 청크를 제외한 각 평문 청크에 포함되는 평문 블록 M[i_2]과, 상기 Z와, 상기 C[m_2]을 n 비트로 패딩하여 얻은 C_n[m_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
    T = F_K((N, Tw_T_2), SUM)
    로 구하는 인증 암호 장치.
  4. 제2항에 있어서,
    상기 복호 수단은,
    입력된 암호문이 짝수의 블록들로 분할되고, 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 최종 암호문 블록을 포함하는 최종 암호문 청크에 대하여, 미리 결정된 2 라운드 Feistel 구조를 적용하여, 최종 암호 블록의 복호된 평문 블록을 포함하는 최종 복호된 평문 청크를 생성하는 제2의 2 라운드 Feistel 복호 수단; 및
    입력된 암호문이 짝수의 블록들로 분할되고, 상기 최종 블록의 사이즈가 미리 결정된 블록 사이즈 미만인 경우에, 복호된 평문의 체크섬을, 상기 2 라운드 Feistel 복호 수단으로부터의 출력과, 상기 제2의 2 라운드 Feistel 복호 수단으로부터의 출력과, 상기 최종 암호문 블록을 사용해서 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서, 복호 검증용 인증 태그를 생성하는 제2 복호 검증용 태그 계산 수단을 포함하고,
    상기 제2의 2 라운드 Feistel 복호 수단은, 상기 최종 암호문 청크의 인덱스를 m, 상기 최종 암호문 블록을 C[m_2], 상기 최종 암호문 청크를 CC[m] = (C[m_1], C[m_2]), 상기 최종 암호문 청크 CC[m]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_m_1)과 (N, Tw_m_2), 암호화 함수를 F_K(*,*), 상기 최종 암호문 블록의 사이즈를 s, 블록 사이즈를 n, s 비트로부터 n 비트로의 패딩 처리를 pad_n(), 그리고 n 비트로부터 s 비트로의 커팅 처리를 cut_s()로 가정하면, s 비트의 최종 복호된 평문 블록 M’[m_2]을 포함하는 상기 최종 복호된 평문 청크 MC’[m] = (M’[m_1], M’[m_2])을,
    M’[m_1] = F_K((N, Tw_m_2), pad_n(C[m_2])) xor C[m_1],
    M’[m_2] = cut_s(Z') xor C[m_2]
    로 구하고,
    여기서, Z' = F_K((N, Tw_m_1), M’[m_1])이고,
    상기 제2 복호 검증용 태그 계산 수단은, 복호된 평문의 체크섬을, 상기 최종 복호된 평문 청크를 제외한 복호된 각 평문 청크에 포함되는 복호된 평문 블록 M'[i_2]과, 상기 Z'와, 상기 C[m_2]을 n 비트로 패딩하여 얻은 C_n[m_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
    T' = F_K((N, Tw_T_2), SUM')
    로 구하는 인증 암호 장치.
  5. 제1항 또는 제3항에 있어서,
    상기 암호화 수단은,
    입력된 평문이 홀수의 블록들로 분할되는 경우에, 최종 평문 블록을 포함하는 최종 평문 청크에 대하여, 미리 결정된 1 라운드 Feistel 구조를 적용하여, 최종 암호문 블록을 포함하는 최종 암호문 청크를 생성하는 1 라운드 Feistel 암호화 수단; 및
    입력된 평문이 홀수의 블록들로 분할되는 경우에, 평문의 체크섬을, 입력된 평문과, 상기 1 라운드 Feistel 암호화 수단으로부터의 출력을 사용해서 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서, 인증 태그를 생성하는 제3 태그 계산 수단을 포함하고,
    상기 1 라운드 Feistel 암호화 수단은, 상기 최종 평문 청크의 인덱스를 m, 상기 최종 평문 블록을 M[m_1], 상기 최종 평문 청크를 MC[m] = (M[m_1]), 상기 최종 평문 블록에 대응하는 보조 변수를 (N, Tw_m_1), 암호화 함수를 F_K(*,*), 상기 최종 평문 블록의 사이즈를 s, 블록 사이즈를 n, 그리고 n 비트로부터 s 비트로의 커팅 처리를 cut_s()로 가정하면, s 비트의 상기 최종 암호문 블록 C[m_1]을 포함하는 상기 최종 암호문 청크 CC[m] = (C[m_1])을,
    C[m_1] = cut_s(F_K((N, Tw_m_1), 0^n)) xor M[m_1]
    로 구하고,
    여기서, s = n이면, cut_s()은 생략 가능하고,
    상기 제3 태그 계산 수단은, 평문의 체크섬을, 상기 최종 평문 청크를 제외한 각 평문 청크에 포함되는 평문 블록 M[i_2]과, M[m_1]을 n 비트로 패딩하여 얻은 M_n[m_1](여기서, s=n이면, 패딩 처리는 생략 가능)을 사용해서 계산하고, 결과적인 체크섬을 SUM, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_3), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
    T = F_K((N, Tw_T_3), SUM)
    로 구하는 인증 암호 장치.
  6. 제2항 또는 제4항에 있어서,
    상기 복호 수단은,
    입력된 암호문이 홀수의 블록들로 분할되는 경우에, 최종 암호문 블록을 포함하는 최종 암호문 청크에 대하여, 미리 결정된 1 라운드 Feistel 구조를 적용하여, 최종 복호된 평문 블록을 포함하는 최종 평문 청크를 생성하는 1 라운드 Feistel 복호 수단; 및
    입력된 암호문이 홀수의 블록들로 분할되는 경우에, 복호된 평문의 체크섬을, 상기 2 라운드 Feistel 복호 수단으로부터의 출력과, 상기 1 라운드 Feistel 복호 수단으로부터의 출력을 사용해서 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서, 복호 검증용 인증 태그를 생성하는 제3 복호 검증용 태그 계산 수단을 포함하고,
    상기 1 라운드 Feistel 복호 수단은, 상기 최종 암호문 청크의 인덱스를 m, 상기 최종 암호문 블록을 C[m_1], 상기 최종 암호문 청크를 CC[m] = (C[m_1]), 상기 최종 암호문 블록에 대응하는 보조 변수를 (N, Tw_m_1), 암호화 함수를 F_K(*,*), 상기 최종 암호문 블록의 사이즈를 s, 블록 사이즈를 n, 그리고 n 비트로부터 s 비트로의 커팅 처리를 cut_s()로 가정하면, s 비트의 상기 최종 복호된 평문 블록 M’[m_1]을 포함하는 최종 복호된 평문 청크 MC'[m] = (M'[m_1])을,
    M'[m_1] = cut_s(F_K((N, Tw_m_1), 0^n)) xor [m_1]
    로 구하고,
    여기서, s = n이면, cut_s()은 생략 가능하고,
    상기 제3 복호 검증용 태그 계산 수단은, 복호된 평문의 체크섬을, 상기 최종 복호된 평문 청크를 제외한 복호된 각 평문 청크에 포함되는 평문 블록 M'[i_2]과, 상기 M'[m_1]을 n 비트로 패딩하여 얻은 M_n'[m_1](여기서, s = n이면, 패딩 처리는 생략 가능)을 사용해서 계산하고, 결과적인 체크섬을 SUM', 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_3), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T'를,
    T' = F_K((N, Tw_T_3), SUM')
    로 구하는 인증 암호 장치.
  7. 제1항 내지 제4항 중 어느 한 항에 있어서,
    암호화 함수가, Tweak라고 불리는 보조 변수를 포함하는 2 변수 입력의 Tweakable 블록 암호인 인증 암호 장치.
  8. 제1항 내지 제4항 중 어느 한 항에 있어서,
    암호화 함수가, 제1 변수와 제2 변수의 결합된 입력을 갖는 키(keyed) 해시 함수인 인증 암호 장치.
  9. 암호화 장치로서,
    입력된 평문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문을 생성하고, 입력된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 상기 암호화 함수를 적용해서 인증 태그를 생성하는 암호화 수단을 포함하고,
    상기 암호화 수단은,
    암호화될 평문과 초기 벡터를 입력하는 평문 입력 수단;
    상기 초기 벡터와 상기 입력된 평문의 사이즈에 기초하여, 상기 암호화 함수의 각각에 부여하는 보조 변수를 생성하는 보조 변수 생성 수단;
    상기 평문을 2 블록마다의 청크들로 나누었을 때의 각 평문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 상기 평문 청크에 대응하는 암호문 청크를 생성하는 2 라운드 Feistel 암호화 수단; 및
    상기 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서 인증 태그를 생성하는 태그 계산 수단을 포함하고,
    상기 2 라운드 Feistel 암호화 수단은, 초기 벡터를 N, 청크 인덱스를 i, i번째의 평문 청크를 MC[i] = (M[i_1], M[i_2]), 상기 평문 청크 MC[i]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, i번째의 암호문 청크 CC[i] = (C[i_1], C[i_2])을,
    C[i_1] = F_K((N, Tw_i_1), M[i_1]) xor M[i_2],
    C[i_2] = F_K((N, Tw_i_2), C[i_1]) xor M[i_1]
    로 구하고,
    상기 태그 계산 수단은, 평문의 체크섬을, 각 평문 청크에 포함되는 평문 블록 M[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
    T = F_K((N, Tw_T_1), SUM)
    로 구하는, 암호화 장치.
  10. 복호 장치로서,
    입력된 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 복호된 평문을 생성하고, 복호된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 상기 암호화 함수를 적용해서 인증 태그를 생성하는 복호 수단을 포함하고,
    상기 복호 수단은,
    복호될 암호문과 초기 벡터와 인증 태그를 입력하는 암호문 입력 수단;
    상기 초기 벡터와 상기 입력된 암호문의 사이즈에 기초하여, 상기 암호화 함수의 각각에 부여하는, 암호화 시에서와 동일한 보조 변수를 생성하는 복호용 보조 변수 생성 수단;
    상기 암호문을 2 블록마다의 청크들로 나누었을 때의 각 암호문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 상기 암호문 청크에 대응하는 복호된 평문 청크를 생성하는 2 라운드 Feistel 복호 수단;
    상기 복호된 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서 복호 검증용 인증 태그를 생성하는 복호 검증용 태그 계산 수단; 및
    상기 복호 검증용 태그 계산 수단이 생성한 복호 검증용 인증 태그와 상기 입력된 인증 태그에 기초하여, 상기 복호의 성공 또는 실패를 판정하는 판정 수단을 포함하고,
    상기 2 라운드 Feistel 복호 수단은, 초기 벡터를 N, 청크 인덱스를 i, i번째의 암호문 청크를 CC[i] = (C[i_1], C[i_2]), 상기 암호문 청크 CC[i]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, i번째의 복호된 평문 청크 MC’[i] = (M’[i_1], M’[i_2])을,
    M’[i_1] = F_K((N, Tw_i_2), C[i_1]) xor C[i_2],
    M’[i_2] = F_K((N, Tw_i_1), M’[i_1]) xor C[i_1]
    로 구하고,
    상기 복호 검증용 태그 계산 수단은, 복호된 평문의 체크섬을, 복호된 각 평문 청크에 포함되는 복호된 각 평문 블록 M’[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
    T' = F_K((N, Tw_T_1), SUM')
    로 구하는, 복호 장치.
  11. 인증 암호 방법으로서,
    정보 처리 장치가, 입력된 평문 또는 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문 또는 복호된 평문을 생성하고, 입력된 평문 또는 복호된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 상기 암호화 함수를 적용해서 인증 태그를 생성하고,
    상기 정보 처리 장치는 암호화 처리를 수행하고,
    상기 암호화 처리에서, 상기 정보 처리 장치는:
    암호화될 평문과 초기 벡터를 입력하는 평문 입력 처리;
    상기 초기 벡터와 상기 입력된 평문의 사이즈에 기초하여, 상기 암호화 함수의 각각에 부여하는 보조 변수를 생성하는 보조 변수 생성 처리;
    상기 평문을 2 블록마다의 청크들로 나누었을 때의 각 평문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 상기 평문 청크에 대응하는 암호문 청크를 생성하는 2 라운드 Feistel 암호화 처리; 및
    상기 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서 인증 태그를 생성하는 태그 계산 처리를 수행하고,
    상기 2 라운드 Feistel 암호화 처리에서, 초기 벡터를 N, 청크 인덱스를 i, i번째의 평문 청크를 MC[i] = (M[i_1], M[i_2]), 상기 평문 청크 MC[i]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 상기 정보 처리 장치는 i번째의 암호문 청크 CC[i] = (C[i_1], C[i_2])을,
    C[i_1] = F_K((N, Tw_i_1), M[i_1]) xor M[i_2],
    C[i_2] = F_K((N, Tw_i_2), C[i_1]) xor M[i_1]
    로 구하고,
    상기 태그 계산 처리에서, 상기 정보 처리 장치는 평문의 체크섬을, 각 평문 청크에 포함되는 평문 블록 M[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
    T = F_K((N, Tw_T_1), SUM)
    로 구하는, 인증 암호 방법.
  12. 인증 암호 방법으로서,
    정보 처리 장치가, 입력된 평문 또는 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문 또는 복호된 평문을 생성하고, 입력된 평문 또는 복호된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 상기 암호화 함수를 적용해서 인증 태그를 생성하고,
    상기 정보 처리 장치는 복호 처리를 수행하고,
    상기 복호 처리에서, 상기 정보 처리 장치는:
    복호될 암호문과 초기 벡터와 인증 태그를 입력하는 암호문 입력 처리;
    상기 초기 벡터와 상기 입력된 암호문의 사이즈에 기초하여, 상기 암호화 함수의 각각에 부여하는, 암호화 시에서와 동일한 보조 변수를 생성하는 복호용 보조 변수 생성 처리;
    상기 암호문을 2 블록마다의 청크들로 나누었을 때의 각 암호문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 상기 암호문 청크에 대응하는 복호된 평문 청크를 생성하는 2 라운드 Feistel 복호 처리;
    상기 복호된 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서 복호 검증용 인증 태그를 생성하는 복호 검증용 태그 계산 처리; 및
    상기 복호 검증용 태그 계산 처리에서 생성한 복호 검증용 인증 태그와 상기 입력된 인증 태그에 기초하여, 상기 복호의 성공 또는 실패를 판정하는 판정 처리를 포함하고,
    상기 2 라운드 Feistel 복호 처리에서, 초기 벡터를 N, 청크 인덱스를 i, i번째의 암호문 청크를 CC[i] = (C[i_1], C[i_2]), 상기 암호문 청크 CC[i]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 상기 정보 처리 장치는 i번째의 복호된 평문 청크 MC’[i] = (M’[i_1], M’[i_2])을,
    M’[i_1] = F_K((N, Tw_i_2), C[i_1]) xor C[i_2],
    M’[i_2] = F_K((N, Tw_i_1), M’[i_1]) xor C[i_1]
    로 구하고,
    상기 복호 검증용 태그 계산 처리에서, 상기 정보 처리 장치는 복호된 평문의 체크섬을, 복호된 각 평문 청크에 포함되는 복호된 각 평문 블록 M’[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
    T' = F_K((N, Tw_T_1), SUM')
    로 구하는, 인증 암호 방법.
  13. 인증 암호용 프로그램을 기록한 컴퓨터 판독가능한 기록 매체로서,
    상기 인증 암호용 프로그램은,
    컴퓨터에, 입력된 평문 또는 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문 또는 복호된 평문을 생성하고, 입력된 평문 또는 복호된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 상기 암호화 함수를 적용해서 인증 태그를 생성하는 처리를 실행시키기 위한 것이고,
    상기 프로그램은 상기 컴퓨터에 암호화 처리를 실행시키기 위한 것이고,
    상기 암호화 처리에서, 상기 프로그램은 상기 컴퓨터에:
    암호화될 평문과 초기 벡터를 입력하는 평문 입력 처리;
    상기 초기 벡터와 상기 입력된 평문의 사이즈에 기초하여, 상기 암호화 함수의 각각에 부여하는 보조 변수를 생성하는 보조 변수 생성 처리;
    상기 평문을 2 블록마다의 청크들로 나누었을 때의 각 평문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 상기 평문 청크에 대응하는 암호문 청크를 생성하는 2 라운드 Feistel 암호화 처리; 및
    상기 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서 인증 태그를 생성하는 태그 계산 처리를 실행시키고,
    상기 2 라운드 Feistel 암호화 처리에서, 초기 벡터를 N, 청크 인덱스를 i, i번째의 평문 청크를 MC[i] = (M[i_1], M[i_2]), 상기 평문 청크 MC[i]에 포함되는 2개의 평문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 상기 프로그램은 상기 컴퓨터에 i번째의 암호문 청크 CC[i] = (C[i_1], C[i_2])을,
    C[i_1] = F_K((N, Tw_i_1), M[i_1]) xor M[i_2],
    C[i_2] = F_K((N, Tw_i_2), C[i_1]) xor M[i_1]
    로 구하는 단계를 실행시키고,
    상기 태그 계산 처리에서, 상기 프로그램은 상기 컴퓨터에, 평문의 체크섬을, 각 평문 청크에 포함되는 평문 블록 M[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM, 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 인증 태그 T를,
    T = F_K((N, Tw_T_1), SUM)
    로 구하는 단계를 실행시키는, 컴퓨터 판독가능한 기록 매체.
  14. 인증 암호용 프로그램을 기록한 컴퓨터 판독가능한 기록 매체로서,
    상기 인증 암호용 프로그램은,
    컴퓨터에, 입력된 평문 또는 암호문에 대하여, 2 블록마다, 보조 변수를 할당한 암호화 함수를 라운드 함수에 사용한 2 라운드 Feistel 구조를 적용해서 암호문 또는 복호된 평문을 생성하고, 입력된 평문 또는 복호된 평문 내의 일부 비트들을 사용해서 계산된 체크섬에 대해 상기 암호화 함수를 적용해서 인증 태그를 생성하는 처리를 실행시키기 위한 것이고,
    상기 프로그램은 상기 컴퓨터에 복호 처리를 실행시키기 위한 것이고,
    상기 복호 처리에서, 상기 프로그램은 상기 컴퓨터에:
    복호될 암호문과 초기 벡터와 인증 태그를 입력하는 암호문 입력 처리;
    상기 초기 벡터와 상기 입력된 암호문의 사이즈에 기초하여, 상기 암호화 함수의 각각에 부여하는, 암호화 시에서와 동일한 보조 변수를 생성하는 복호용 보조 변수 생성 처리;
    상기 암호문을 2 블록마다의 청크들로 나누었을 때의 각 암호문 청크에 대하여 2 라운드 Feistel 구조를 적용함으로써, 상기 암호문 청크에 대응하는 복호된 평문 청크를 생성하는 2 라운드 Feistel 복호 처리;
    상기 복호된 평문의 체크섬을 계산하고, 결과적인 체크섬에 대하여, 보조 변수를 할당한 암호화 함수를 적용시켜서 복호 검증용 인증 태그를 생성하는 복호 검증용 태그 계산 처리; 및
    상기 복호 검증용 태그 계산 처리에서 생성한 복호 검증용 인증 태그와 상기 입력된 인증 태그에 기초하여, 상기 복호의 성공 또는 실패를 판정하는 판정 처리를 실행시키고,
    상기 2 라운드 Feistel 복호 처리에서, 초기 벡터를 N, 청크 인덱스를 i, i번째의 암호문 청크를 CC[i] = (C[i_1], C[i_2]), 상기 암호문 청크 CC[i]에 포함되는 2개의 암호문 블록에 대응하는 보조 변수의 쌍을 (N, Tw_i_1)과 (N, Tw_i_2), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 상기 프로그램은 상기 컴퓨터에 i번째의 복호된 평문 청크 MC’[i] = (M’[i_1], M’[i_2])을,
    M’[i_1] = F_K((N, Tw_i_2), C[i_1]) xor C[i_2],
    M’[i_2] = F_K((N, Tw_i_1), M’[i_1]) xor C[i_1]
    로 구하는 단계를 실행시키고,
    상기 복호 검증용 태그 계산 처리에서, 상기 프로그램은 상기 컴퓨터에, 복호된 평문의 체크섬을, 복호된 각 평문 청크에 포함되는 복호된 각 평문 블록 M’[i_2]을 사용해서 계산하고, 결과적인 체크섬을 SUM', 복호 검증용 인증 태그 생성에 사용된 암호화 함수에 부여하는 보조 변수를 (N, Tw_T_1), 그리고 암호화 함수를 F_K(*,*)로 가정하면, 복호 검증용 인증 태그 T’를,
    T' = F_K((N, Tw_T_1), SUM')
    로 구하는 단계를 실행시키는, 컴퓨터 판독가능한 기록 매체.
KR1020167002966A 2013-08-02 2014-06-24 인증 암호 장치, 인증 암호 방법 및 컴퓨터 판독가능한 기록 매체 KR101809386B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JPJP-P-2013-161446 2013-08-02
JP2013161446 2013-08-02
PCT/JP2014/003382 WO2015015702A1 (ja) 2013-08-02 2014-06-24 認証暗号装置、認証暗号方法および認証暗号用プログラム

Publications (2)

Publication Number Publication Date
KR20160027982A KR20160027982A (ko) 2016-03-10
KR101809386B1 true KR101809386B1 (ko) 2017-12-14

Family

ID=52431268

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167002966A KR101809386B1 (ko) 2013-08-02 2014-06-24 인증 암호 장치, 인증 암호 방법 및 컴퓨터 판독가능한 기록 매체

Country Status (9)

Country Link
US (1) US10341088B2 (ko)
EP (1) EP3029877B1 (ko)
JP (1) JP6519473B2 (ko)
KR (1) KR101809386B1 (ko)
CN (1) CN105453482B (ko)
AU (1) AU2014297854B2 (ko)
BR (1) BR112016001596B1 (ko)
RU (1) RU2647685C2 (ko)
WO (1) WO2015015702A1 (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SG11201508780UA (en) * 2013-04-24 2015-11-27 Nec Europe Ltd Method and system for encrypting data
WO2016082857A1 (en) 2014-11-24 2016-06-02 Nec Europe Ltd. Method for encrypting data for distributed storage
KR102539111B1 (ko) * 2014-12-03 2023-06-01 나그라비젼 에스에이알엘 메시지 부호화 및 복호화를 위한 블록 암호화 방법 및 이 방법을 구현하기 위한 암호화 장치
JP2017073716A (ja) * 2015-10-09 2017-04-13 日本電気株式会社 タグリスト生成装置、タグリスト検証装置、タグリスト更新装置、タグリスト生成方法及びプログラム
JP6386198B1 (ja) 2017-02-21 2018-09-05 三菱電機株式会社 暗号化装置及び復号装置
US11251965B2 (en) 2017-04-17 2022-02-15 Nec Corporation Authentication tag generation apparatus, authentication tag verification apparatus, method and program
JP6881112B2 (ja) * 2017-07-10 2021-06-02 日本電信電話株式会社 暗号化データ生成装置、復号データ生成装置、追加データ付き認証暗号システム、その方法、及びプログラム
JP6881111B2 (ja) * 2017-07-10 2021-06-02 日本電信電話株式会社 暗号化データ生成装置、復号データ生成装置、追加データ付き認証暗号システム、その方法、及びプログラム
US11126718B2 (en) * 2017-07-12 2021-09-21 Acronis International Gmbh Method for decrypting data encrypted by ransomware
WO2019043921A1 (ja) * 2017-09-01 2019-03-07 三菱電機株式会社 暗号化装置、復号装置、暗号化方法、復号方法、暗号化プログラム及び復号プログラム
CN108155986A (zh) * 2017-12-14 2018-06-12 晶晨半导体(上海)股份有限公司 一种基于可信执行环境的密钥烧录系统及方法
KR102438784B1 (ko) * 2018-01-05 2022-09-02 삼성전자주식회사 데이터를 난독화 및 복호화 하는 전자 장치 및 그의 제어 방법
WO2019142306A1 (ja) * 2018-01-19 2019-07-25 ルネサスエレクトロニクス株式会社 半導体装置、データ提供方法、データ復号方法、およびプログラム
WO2019163032A1 (ja) * 2018-02-21 2019-08-29 日本電気株式会社 暗号化装置、暗号化方法、プログラム、復号装置、復号方法
RU2694336C1 (ru) * 2018-05-08 2019-07-11 Открытое Акционерное Общество "Информационные Технологии И Коммуникационные Системы" Способ аутентифицированного шифрования
WO2020065820A1 (ja) * 2018-09-27 2020-04-02 日本電気株式会社 Macタグリスト生成装置、macタグリスト検証装置、集約mac検証システム及び方法
US11728968B2 (en) 2018-11-07 2023-08-15 Nrc Corporation Authenticated encryption device, authenticated decryption device, authenticated encryption method, authenticated decryption method, authenticated encryption program, and authenticated decryption program
WO2021214923A1 (ja) * 2020-04-23 2021-10-28 日本電気株式会社 認証暗号化装置、認証復号装置、認証暗号システム、方法及びコンピュータ可読媒体
CN112866288B (zh) * 2021-03-01 2022-09-06 上海海事大学 一种双明文传输的数据对称加密方法
CN113596824A (zh) * 2021-07-30 2021-11-02 深圳供电局有限公司 一种5g安全协议中认证失败明文信息的加密方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060285684A1 (en) * 2001-07-30 2006-12-21 Rogaway Phillip W Method and apparatus for facilitating efficient authenticated encryption

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623549A (en) * 1995-01-30 1997-04-22 Ritter; Terry F. Cipher mechanisms with fencing and balanced block mixing
US6804355B1 (en) * 2000-01-06 2004-10-12 Intel Corporation Block cipher for small selectable block sizes
JP2002049310A (ja) * 2000-08-04 2002-02-15 Toshiba Corp 暗復号装置、認証装置及び記憶媒体
US20020078342A1 (en) * 2000-09-25 2002-06-20 Broadcom Corporation E-commerce security processor alignment logic
JP3990565B2 (ja) * 2000-12-25 2007-10-17 松下電器産業株式会社 セキュリティ通信パケット処理装置及びその方法
US7376826B2 (en) * 2002-05-31 2008-05-20 Broadcom Corporation Methods and apparatus for performing encryption and authentication
US7796752B2 (en) * 2002-11-04 2010-09-14 Marvell International Ltd. Cipher implementation
JP4561252B2 (ja) * 2004-09-03 2010-10-13 ソニー株式会社 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
JP2006253746A (ja) * 2005-03-08 2006-09-21 N-Crypt Inc データ処理装置、データ処理システム、及びデータ処理方法
US8687800B2 (en) * 2006-08-15 2014-04-01 Alcatel Lucent Encryption method for message authentication
US9209967B2 (en) 2007-03-12 2015-12-08 Exelis, Inc. Precalculated encryption key
US20090119510A1 (en) * 2007-11-06 2009-05-07 Men Long End-to-end network security with traffic visibility
JP5504592B2 (ja) * 2008-08-25 2014-05-28 ソニー株式会社 データ変換装置、およびデータ変換方法、並びにプログラム
EP2822215A1 (en) * 2012-03-02 2015-01-07 Sony Corporation Information processing device, information processing method, and programme
EP2909962B1 (en) * 2012-11-29 2018-02-28 BlackBerry Limited Authenticated encryption method using working blocks
TWI510046B (zh) * 2013-07-04 2015-11-21 Univ Nat Cheng Kung 認證式加解密方法
CN104683093B (zh) * 2013-11-27 2018-01-26 财团法人资讯工业策进会 兼具完整性验证的区块加密装置、区块加密方法、区块解密装置及区块解密方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060285684A1 (en) * 2001-07-30 2006-12-21 Rogaway Phillip W Method and apparatus for facilitating efficient authenticated encryption

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Anderson, Erik, et al. "Manticore and CS Mode: Parallelizable Encryption with Joint Cipher-State Authentication."(2004.10.)*
Liskov, Moses, Ronald L. Rivest, and David Wagner. "Tweakable block ciphers." Journal of cryptology 24.3 (2011)*

Also Published As

Publication number Publication date
AU2014297854A1 (en) 2016-02-04
US20160173276A1 (en) 2016-06-16
BR112016001596A2 (ko) 2017-07-25
US10341088B2 (en) 2019-07-02
EP3029877B1 (en) 2018-04-11
WO2015015702A1 (ja) 2015-02-05
BR112016001596B1 (pt) 2023-04-11
CN105453482A (zh) 2016-03-30
EP3029877A1 (en) 2016-06-08
EP3029877A4 (en) 2017-03-15
RU2647685C2 (ru) 2018-03-16
RU2016107391A (ru) 2017-09-07
JP6519473B2 (ja) 2019-06-05
JPWO2015015702A1 (ja) 2017-03-02
CN105453482B (zh) 2019-06-21
KR20160027982A (ko) 2016-03-10
AU2014297854B2 (en) 2016-12-22

Similar Documents

Publication Publication Date Title
KR101809386B1 (ko) 인증 암호 장치, 인증 암호 방법 및 컴퓨터 판독가능한 기록 매체
JP6740902B2 (ja) 認証暗号化方法、認証復号方法および情報処理装置
JP5704159B2 (ja) ブロック暗号化装置、ブロック復号装置、ブロック暗号化方法、ブロック復号方法及びプログラム
WO2013065241A1 (ja) インクリメンタルmacタグ生成装置、方法及びプログラム並びにメッセージ認証装置
US11463235B2 (en) Encryption device, encryption method, program, decryption device, and decryption method
WO2017056150A1 (ja) メッセージ認証子生成装置、メッセージ認証子生成方法及びメッセージ認証子生成プログラム
JP4860708B2 (ja) ストリーム暗号方法および暗号システム
WO2016067524A1 (ja) 認証付暗号化装置、認証付復号装置、認証付暗号システム、認証付暗号化方法、プログラム
JPWO2010024003A1 (ja) 倍ブロック長ブロック暗号化装置、復号装置、暗号化方法及び復号方法、及びそのプログラム
US20130308775A1 (en) Block encryption device, decryption device, encrypting method, decrypting method and program
JP7367860B2 (ja) 認証暗号化装置、認証復号装置、認証暗号システム、方法及びプログラム
CN115632765A (zh) 加密方法、解密方法、装置、电子设备及存储介质
JP7136226B2 (ja) 認証暗号化装置、認証復号装置、認証暗号化方法、認証復号方法、認証暗号化プログラムおよび認証復号プログラム
JP6631989B2 (ja) 暗号化装置、制御方法、及びプログラム
JP3694242B2 (ja) 署名付き暗号通信方法及びその装置
US11502818B2 (en) System to secure encoding and mapping on elliptic curve cryptography (ECC)
JP5293612B2 (ja) 暗号化装置、復号装置、暗号化方法、復号方法およびプログラム
KR20030001888A (ko) 키를 사용하지 않고 블록 정보만을 이용하는 암호알고리즘 설계 방법
Singh et al. ENHANCEMENT OF WIRED EQUIVALENT PRIVACY
Rojasri et al. Secure Message Authentication Process in Mobile Computing
JP2017129779A (ja) 暗号生成装置、データ伝送システム、暗号生成方法及びデータ伝送方法

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