KR101964495B1 - 해시값 생성 장치 - Google Patents

해시값 생성 장치 Download PDF

Info

Publication number
KR101964495B1
KR101964495B1 KR1020157027625A KR20157027625A KR101964495B1 KR 101964495 B1 KR101964495 B1 KR 101964495B1 KR 1020157027625 A KR1020157027625 A KR 1020157027625A KR 20157027625 A KR20157027625 A KR 20157027625A KR 101964495 B1 KR101964495 B1 KR 101964495B1
Authority
KR
South Korea
Prior art keywords
processing
data
processing means
axis direction
bits
Prior art date
Application number
KR1020157027625A
Other languages
English (en)
Other versions
KR20150128836A (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 KR20150128836A publication Critical patent/KR20150128836A/ko
Application granted granted Critical
Publication of KR101964495B1 publication Critical patent/KR101964495B1/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/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Power Engineering (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Processing (AREA)
  • Storage Device Security (AREA)
  • Multi Processors (AREA)

Abstract

KECCAK 알고리즘에 기초하여 해시값을 생성하는 해시값 생성 장치는, 상기 KECCAK 알고리즘의 라운드 처리에 포함되는 θ, ρ, π, χ, ι의 5개의 스텝의 처리를 행하는 θ 처리 유닛, ρ 처리 유닛, π 처리 유닛, χ 처리 유닛, ι 처리 유닛을 포함한다. 상기 π 처리 유닛은 플레인의 단위로 데이터의 입력을 수신하고, 시트의 단위로 데이터를 출력한다.

Description

해시값 생성 장치{HASH VALUE GENERATING DEVICE}
본 발명은 해시값을 생성하는 기술에 관한 것이다.
데이터의 변경을 검증하기 위해서, 암호학적 해시 알고리즘을 사용해서 계산되는 해시값이 이용되고 있다. 암호학적 해시 알고리즘(암호학적 해시)인 SHA-1(Secure Hash Algorithm 1)은 안전성을 확보할 수 없음이 이미 증명되고 있다. SHA-2 패밀리(SHA-224, SHA-256, SHA-384, SHA-512)도 안전성이 부족할 수 있음이 지적되고 있다. 따라서, 미국 국립 표준 기술 연구소(NIST)는 차세대의 암호학적 해시 알고리즘(SHA-3)을 확립하기 위해서 새로운 알고리즘을 공모했다. 그리고, 2012년 12월에, KECCAK 알고리즘("The KECCAK reference", Version 3.0, January 14, 2011, (http://keccak.noekeon.org/Keccak-reference-3.0.pdf))이 SHA-3로서 선정되었다.
SHA-3에서는, 임의의 길이의 입력 메시지(데이터)로부터 고정 길이의 암호학적 해시값을 출력한다. KECCAK 알고리즘에서는 치환 함수(permutation function)가 사용되고, 이 치환 함수에서는 5개의 스텝(θ, ρ, π, χ, ι)을 순서대로 적용하는 라운드 처리를 24회 반복한다. 라운드 처리는 "스테이트(state)" 데이터라고 불리는 1600 비트 길이의 데이터에 대하여 실행된다.
라운드 처리의 5개의 스텝 중 θ 처리와 π 처리에 대하여 선행하는 처리의 많은 결과가 메모리에 일단 저장되어야 한다. 그로 인해, 선행하는 처리의 많은 결과가 1회의 라운드 처리 내에서 2회 메모리에 일단 저장되어야 하므로, 고속화가 곤란했다.
본 발명은 해시값 생성의 스루풋을 향상시키기 위한 기술을 제공하는 것에 관한 것이다.
본 발명의 일 측면에 따르면, KECCAK 알고리즘에 기초하여 해시값을 생성하는 해시값 생성 장치는, 상기 KECCAK 알고리즘의 라운드 처리에 포함되는 5개의 스텝 θ, ρ, π, χ 및 ι의 처리를 실행하는 θ 처리 수단, ρ 처리 수단, π 처리 수단, χ 처리 수단 및 ι 처리 수단을 포함하고, 상기 π 처리 수단은, 플레인(plane) 단위의 데이터 입력을 수신하고, 시트(sheet) 단위의 데이터를 출력한다.
본 발명의 추가적인 특징은 첨부 도면을 참조하여 아래의 예시적인 실시 형태의 설명으로부터 명확해질 것이다.
도 1a, 1b 및 1c는 KECCAK 알고리즘을 설명하는 도면.
도 2a, 2b, 2c, 2d, 2e 및 2f는 데이터 구조를 설명하는 도면.
도 3a 및 3b는 스텝 θ의 처리를 설명하는 도면.
도 4a, 4b 및 4c는 스텝 ρ의 처리를 설명하는 도면.
도 5a 및 5b는 스텝 π의 처리를 설명하는 도면.
도 6은 스텝 χ의 처리를 설명하는 도면.
도 7은 스텝 ι의 처리를 설명하는 도면.
도 8은 스텝 ι에서의 라운드 상수를 도시하는 도면.
도 9a, 9b 및 9c는 라운드 처리 R´의 개요를 설명하는 도면.
도 10a, 10b 및 10c는 스텝 ρ´의 처리를 설명하는 도면.
도 11은 스텝 θ1의 처리를 설명하는 도면.
도 12는 스텝 θ2의 처리를 설명하는 도면.
도 13a, 13b 및 13c는 스텝 θ2´의 처리를 설명하는 도면.
도 14a, 14b 및 14c는 동작 타이밍 차트.
도 15는 KECCAK 알고리즘에 의해 레인(lane)을 단위로 하여 처리가 행해지는 경우의 구현예의 개략 구성을 도시하는 도면.
도 16은 제1 실시 형태에 따른 KECCAK 알고리즘의 구현예의 개략 구성을 도시하는 도면.
도 17은 도 16에 도시된 구성을 보다 상세하게 도시하는 도면.
도 18은 레지스터의 구현예를 도시하는 도면.
도 19는 θ2 & ρ & π 회로의 구현예를 도시하는 도면.
도 20은 χ & ι 회로의 구현예를 도시하는 도면.
도 21은 제2 실시 형태에 따른 KECCAK 알고리즘의 구현예의 개략 구성을 도시하는 도면.
도 22는 θ2 & ρ´ & χ & ι 회로의 구현예를 도시하는 도면.
도 23a 및 23b는 스텝 π의 처리의 특성을 설명하는 도면.
도 24a, 24b, 24c, 24d 및 24e는 레지스터에 의해 행해지는 시트-플레인 단위 변환을 설명하는 도면.
도 25는 π 회로의 구현예를 도시하는 도면.
이하에, 본 발명의 다양한 실시 형태, 특징 및 측면을 도면을 참조하여 상세하게 설명한다.
본 발명의 제1 실시 형태에 따른 해시값 생성 장치로서, SHA-3(KECCAK 알고리즘)의 해시값을 생성하는 장치를 예로 들어서 이하에 설명한다. 이하의 설명에서, 구체적인 데이터 길이 또는 구체적인 비트 값이 제공되고 있을 경우가 있지만, 본 발명은 그 구체적인 길이 또는 값에 한정되지 않는다.
먼저, KECCAK 알고리즘에 대해서 설명한다. 또한, 보다 상세한 사양에 대해서는, "The KECCAK reference", Version 3.0, January 14, 2011, (http://keccak.noekeon.org/Keccak-reference-3.0.pdf)에 기재되어 있다.
도 1a는 KECCAK 알고리즘의 전체 개요를 도시하는 도면이다. 도 1a에서, 메시지 블록(101)(m1 내지 mt)가 도시되어 있다. 메시지 블록(101)(m1 내지 mt)은 해시값이 생성되는 입력 메시지를 1024 비트 블록의 단위로 분할함으로써 생성된다.
도 1a에 도시된 바와 같이, 본 실시 형태에서는 초기값(102, 103)의 모든 비트는 0이다. 여기에서는, 초기값의 모든 비트가 0인 예를 예로 들어 설명하지만, 본 발명은 이 예에 한정되지 않는다. 초기값(102)의 길이는, 상술한 메시지 블록의 길이와 같은 1024 비트이며, 초기값(102, 103)의 길이 합계는 1600 비트이다. 비트 단위의 배타적 논리합(XOR) 연산자(104) 또한 나타내고 있다. 즉, XOR 연산자(104)는 2개의 1024 비트의 입력 데이터의 각 비트에 대하여 배타적 논리합을 계산하고, 그 결과를 1024 비트 데이터로서 출력한다.
치환 함수인 KECCAK-f(105)는 2개의 입력 데이터를 수신하고, 2개의 데이터를 출력한다. KECCAK-f(105)의 상세에 대해서는 도 1b를 참조하여 후술한다. 절취부(cut-out section)(106)는 1024 비트의 입력 데이터로부터 필요한 사이즈를 잘라내고, 잘려진 데이터를 출력한다. 암호학적 해시값(즉, 해시값)(107)은 이 알고리즘의 계산 결과이다.
도 1b는 치환 함수인 KECCAK-f(105)의 개요를 설명하는 도면이다. 라운드 처리 R(201)은 24회 실행된다. 라운드 처리 R의 상세는 후술한다. 입력 데이터(202, 203)가 나타나 있다. 입력 데이터(202)의 길이는 1024 비트이다. 입력 데이터(202, 203)의 길이 합계는 1600 비트이다. 2개의 입력 데이터(202, 203)가 결합되어서, 라운드 처리 R(201)에 입력된다. 출력 데이터(204, 205)가 나타나 있다. 출력 데이터(204)의 길이는 1024 비트이다. 출력 데이터(204, 205)의 길이 합계는 1600 비트이다.
도 1c는 라운드 처리 R(201)의 개요를 설명하는 도면이다. 상술한 바와 같이, 라운드 처리 R(201)에서는, 입력 데이터와 출력 데이터의 길이는 모두 1600 비트이다. 라운드 처리 R(201)에서, 입력 데이터에 대하여 후술하는 5개의 스텝의 처리(θ 처리 유닛(301), ρ 처리 유닛(302), π 처리 유닛(303), χ 처리 유닛(304), ι 처리 유닛(305))를 순서대로 행하여 출력 데이터를 생성한다.
이하에서는, KECCAK 알고리즘의 라운드 처리에서 사용되는 데이터 구조 및 상술한 5개의 스텝의 상세에 대해서 설명한다.
도 2a는 라운드 처리 R(201)의 입출력 시의 데이터 구조인 "스테이트"를 설명하는 도면이다. 상술한 바와 같이, 입력 데이터와 출력 데이터는 모두 1600 비트의 길이를 가진다. 당해 1600 비트의 데이터 각각은, 폭(x축 방향) 5 비트, 높이(y축 방향) 5 비트, 깊이(z축 방향) 64 비트의 3차원 배열의 직육면체로서 표현된다. 이 직육면체의 데이터 구조를 "스테이트"라고 칭한다. 직육면체로서 표현되는 스테이트 구조에 대하여 1600 비트의 데이터가 z축 방향, x축 방향, y축 방향의 순서로 할당된다. 상세한 내용은 도 2f를 참조하여 후술한다.
도 2b는 데이터 구조 "플레인"을 설명하는 도면이다. 플레인 구조는 x-z 평면에 평행하고, 폭 5 비트, 높이 1 비트, 깊이 64 비트의 평면 구조로서 표현된다. 즉, 상술한 "스테이트" 구조는 플레인 구조를 y축 방향으로 5개 겹친 것으로 생각할 수 있다.
도 2c는 데이터 구조 "시트"를 설명하는 도면이다. 시트 구조는 y-z 평면에 평행하고, 폭 1 비트, 높이 5 비트, 깊이 64 비트의 평면 구조로서 표현된다. 즉, 상술한 "스테이트" 구조는 시트 구조를 x축 방향으로 5개 가로로 배열한 것으로 생각할 수 있다.
도 2d는 데이터 구조 "레인"을 설명하는 도면이다. 레인 구조는 z축에 평행하고, 폭 1 비트, 높이 1 비트, 깊이 64 비트의 직선 구조로서 표현된다. 즉, 상술한 "스테이트" 구조는 레인 구조를 x-y 평면을 따라 25개 모은 것으로 생각할 수 있다. 도 2f는 1개의 스테이트 구조에 포함되는 25개의 레인의 순서를 도시하는 도면이다.
도 2e는 데이터 구조 "컬럼(column)"을 설명하는 도면이다. 컬럼 구조는 y축에 평행하고, 폭 1 비트, 높이 5 비트, 깊이 1 비트의 직선 구조로서 표현된다. 즉, 상술한 "시트" 구조는 컬럼 구조를 z축 방향으로 64개 배열한 것으로 생각할 수 있다.
제1 실시 형태에서는, 입력 데이터가 1600 비트일 경우에 대해서 설명하지만, 본 발명은 이 경우에 한정되는 것이 아니다. 또한, 스테이트 구조의 데이터를, 폭(x축 방향) 5 비트, 높이(y축 방향) 5 비트, 깊이(z축 방향) 64 비트의 직육면체의 데이터 구조로서 취급하는 예에 대해서 설명하지만, 본 발명은 이것에 한정되지 않는다. 예를 들어, 입력 데이터가 800 비트이며, 스테이트 구조의 데이터를, 폭 5 비트, 높이 5 비트, 깊이 32 비트의 직육면체의 데이터 구조로서 취급해도 된다.
또한, 플레인 구조, 시트 구조, 레인 구조, 컬럼 구조는 스테이트 구조의 폭(x축 방향), 높이(y축 방향), 깊이(z축 방향)의 각 비트수에 따라서 변경될 수 있다. 즉, 스테이트 구조의 데이터가 x축 방향으로 m 비트, y축 방향으로 n 비트, z축 방향으로 s 비트를 가질 경우, 플레인 구조는 x축 방향으로 m 비트, y축 방향으로 1 비트, z축 방향으로 s 비트를 가지는 평면 구조이다. 시트 구조는 x축 방향으로 1 비트, y축 방향으로 n 비트, z축 방향으로 s 비트를 가지는 평면 구조이다. 레인 구조는 x축 방향으로 1 비트, y축 방향으로 1 비트, z축 방향으로 s 비트를 가지는 직선 구조이다. 컬럼 구조는 x축 방향으로 1 비트, y축 방향으로 n 비트, z축 방향으로 1 비트를 가지는 직선 구조이다.
이어서, KECCAK-f(105)에 입력되는 입력 데이터(202, 203)로부터 제1 라운드 처리 R(201)의 입력 데이터를 형성하는 방법에 대해서 설명한다. 먼저, 입력 데이터(202, 203)를 이 순서대로 연결해서 1600 비트의 데이터 블록을 생성한다. 이어서, 1600 비트의 데이터 블록을 64 비트의 단위로 분할해서 25개의 레인을 생성한다. 마지막으로, 25개의 레인을 도 2f에 나타내는 순서대로 x-y 평면을 따라 배열해서 1개의 스테이트를 구축한다. 이와 같이 하여 생성된 스테이트 구조가 라운드 처리 R(201)에 입력되게 된다. 제24 라운드 처리 R(201)의 출력 데이터로부터 출력 데이터(204, 205)를 생성하는 방법도 마찬가지이기 때문에, 그 설명은 생략한다.
이어서, 라운드 처리 R(201)에 포함되는 5개의 스텝(스텝 θ, ρ, π, χ, ι)의 처리에 대해서 설명한다. 각 스텝에서, 입력 데이터와 출력 데이터의 데이터 구조는 스테이트 구조이다.
도 3a는 스텝 θ의 처리(θ 처리 유닛(301))를 설명하는 도면이다. 스텝 θ는 각 비트에 대하여 2개의 컬럼의 합을 가산하는 처리이며, 이때의 2개의 컬럼은 그 각 비트에 인접한다. θ 처리 유닛(301)은, 출력 스테이트의 각 비트를, 입력 스테이트로부터 얻어지는 3개의 값, 즉 "동일한 위치에 있는 비트의 값"과," x축 방향으로 -1의 위치에 있는 컬럼의 비트의 합"과, "x축 방향으로 +1, z축 방향으로 -1의 위치에 있는 컬럼의 비트의 합"의 합으로서 계산한다. 여기서, 합이란, GF(2) 상에서의 합을 의미하며, 그 결과는 배타적 논리합의 연산과 동일한 결과가 된다. 이러한 처리는 아래의 식으로 표현될 수 있다.
Figure 112015096521889-pct00001
식에서, x는 0 내지 4, y는 0 내지 4, z는 0 내지 63이다.
도 3b는 단부 부분(예를 들어, x=0)의 비트를 구할 경우의 스텝 θ의 처리를 설명하는 도면이다. x=0의 비트를 구하기 위해서, "x축 방향으로 -1의 위치에 있는 컬럼"은, 스테이트의 반대 측의 컬럼, 즉 "x=4의 위치에 있는 컬럼"에 상당한다. 이와 같이, 스테이트 너머의 좌표는 스테이트의 반대 측의 위치로 간주된다. 즉, 좌표값은 동일 스테이트 내에서 순환 시프트된다. 이 룰은, x 좌표, y 좌표, z 좌표에 마찬가지로 적용되고, 다른 4개의 스텝에도 마찬가지로 적용된다.
도 4a, 4b 및 4c는 스텝 ρ의 처리(ρ 처리 유닛(302))를 설명하는 도면이다. 스텝 ρ는 z축 방향에서의 각 비트의 값을 시프트하는 처리이다. 보다 구체적으로는, 도 4a에 도시한 바와 같이, ρ 처리 유닛(302)은 스테이트의 각 레인 내의 값을 지정된 비트수만큼 z 방향으로 순환 시프트하고, 그 시프트된 값을 출력한다. 각 레인에서 값이 시프트되는 비트수는 도 4b에 나타낸 바와 같이 미리 정해지고 있다. 또한, ρ 처리를 실행하기 위해서, 유지부는 도 4c에 도시된 바와 같은 시프트량을 나타내는 테이블을 미리 유지하고, ρ 처리 유닛(302)은 유지되고 있는 테이블을 사용하여 ρ 처리를 실행한다.
도 5a 및 5b는 스텝 π의 처리(π 처리 유닛(303))를 설명하는 도면이다. 스텝 π는 x-y 평면 내에서의 각 비트의 각각을 재배열하는 처리, 즉, 단일 스테이트 내의 25개의 레인을 재배열하는 처리이다. 또한, x-y 평면은 "slice"라고도 불린다. 보다 구체적으로는, 입력 스테이트의 각 레인에 대하여 도 5a의 상단에 도시한 바와 같이 번호를 매겼을 경우, 출력 스테이트는 그 하단에 나타내게 된다. 또한, π 처리를 실행하기 위해서, 유지부는 도 5b에 도시한 바와 같은 재배열처를 나타내는 테이블을 미리 유지하고, π 처리 유닛(303)은 유지되고 있는 테이블을 사용하여 π 처리를 실행한다.
도 6은 스텝 χ의 처리(χ 처리 유닛(304))를 설명하는 도면이다. 스텝 χ는 x축 방향("로우(row)"라고도 불린다)의 열 내의 비트를 사용하여 비트를 변환하는 처리이며, 출력 로우 내의 각 비트는 동일한 입력 로우의 3개의 비트에 기초하여 도출된다. 보다 구체적으로는, 입력 로우의 각 비트로부터 x축 방향으로 +1의 위치에 있는 비트가 0이고, 그 비트로부터 x축 방향으로 +2에 있는 위치의 비트가 1인 경우로 설정이 이루어지면, χ 처리 유닛(304)은 출력 로우의 각 대응 비트의 값을 반전시킨다.
도 7은 스텝 ι의 처리(ι 처리 유닛(305))를 설명하는 도면이다. 스텝 ι은 각 비트에 라운드 상수를 가산하는 처리이다. 도 8은 스텝 ι에서의 라운드 상수를 도시하는 도면이다. 스텝 ι에서, ι 처리 유닛(305)은 x=y=0의 레인의 비트 열에 대하여 라운드마다 미리 정해진 라운드 상수(64 비트 값)와의 배타적 논리합(XOR)을 적용한다. 구체적으로는, ι 처리 유닛(305)은 x=y=0의 레인의 64 비트 값(z=63의 비트를 MSB, z=0의 비트를 LSB로 하는 경우)과, 도 8에 나타나는 라운드 상수의 비트마다의 배타적 논리합을 계산한다. 그리고, ι 처리 유닛(305)은 그 결과를 출력 스테이트에서의 x=y=0의 레인의 비트 열로서 설정한다.
상술한 각 스텝(스텝 θ, ρ, π, χ, ι)의 처리 내용으로부터, 각 스텝의 처리를 개시하는 데 있어서 이하의 제약이 있는 것을 안다
· 스텝 θ에서, 스테이트 내의 각 레인을 계산하기 위해서, θ 처리 유닛(301)은 x축 방향에서 -1의 시트 데이터와 +1의 시트 데이터를 사용한다. 그로 인해, 최초 3개분의 시트가 완성될 때, 즉, θ 처리 유닛(301)이 25개의 레인 가운데 23개의 레인을 전단으로부터 수취했을 때, θ 처리 유닛(301)은 스텝 θ의 처리를 개시할 수 있다.
· 스텝 ρ는 서로 독립된 각 레인에 대한 계산이다. 그로 인해, 전단(스텝 θ)의 계산 결과의 1개의 레인이 출력된 시점에, ρ 처리 유닛(302)은 스텝 ρ의 처리를 개시할 수 있다.
· 스텝 π에서, 스테이트 내의 각 레인을 재배열한다. 그로 인해, 전단(스텝 ρ)의 계산 결과의 1개의 스테이트 전체가 출력된 때에, 즉 25개의 레인이 출력된 때에, π 처리 유닛(303)은 스텝 π의 처리를 개시할 수 있다.
· 스텝 χ에서, 스테이트 내의 각 레인의 계산에서, χ 처리 유닛(304)은 x축 방향에서 +1의 레인 및 x축 방향에서 +2의 레인을 사용한다. 그로 인해, 3개의 레인의 데이터를 수취한 시점에, χ 처리 유닛(304)은 스텝 χ의 처리를 개시할 수 있다.
· 스텝 ι는 서로 독립된 각 레인에 대한 계산이다. 그로 인해, 전단(스텝 χ)의 계산 결과의 1개의 레인이 출력된 시점에서, ι 처리 유닛(305)은 스텝 ι의 처리를 개시할 수 있다.
즉, 스텝 θ, π 및 χ에서는, 각각의 전단의 스텝이 23개의 레인, 25개의 레인, 3개의 레인 각각의 계산 결과를 출력할 때까지 처리를 개시할 수 없다. 이와 같이, 특히 스텝 θ 및 π의 2개의 스텝의 처리는 그들의 전단의 처리의 개시 후에 긴 시간이 경과한 후에 개시될 수 있었다.
이것은, 스텝 θ 또는 스텝 π의 개시 시간을 빠르게 할 수 있으면, 스루풋이 향상될 수 있다는 것을 의미한다. 또한, 각 스텝에서, 레인 단위가 아니라 플레인 단위 또는 시트 단위로 처리함으로써 스루풋이 향상될 수 있다.
이어서, 라운드 처리 R´(801)에 대해서 설명한다. 라운드 처리 R´(801)은 본 실시 형태에서 사용되는 처리이며, 라운드 처리 R(201)과 같은 결과가 되게 설계되고 있다.
도 9a는 라운드 처리 R´(801)의 개요를 설명하는 도면이다. 라운드 처리 R´(801)은 처리 결과가 라운드 처리 R(201)과 같아지도록 설계되고 있다. 라운드 처리 R´(801)에서는, 입력 데이터에 대하여, 6개의 스텝의 처리(θ1 처리 유닛(802), θ2 처리 유닛(803), ρ 처리 유닛(804), π 처리 유닛(805), χ 처리 유닛(806), ι 처리 유닛(807))을 적용해서 출력 데이터를 생성한다.
여기서, ρ 처리 유닛(804), π 처리 유닛(805), χ 처리 유닛(806), ι 처리 유닛(807)은 각각 라운드 처리 R(201)에서의 ρ 처리 유닛(302), π 처리 유닛(303), χ 처리 유닛(304), ι 처리 유닛(305)과 유사하다. θ1 처리 유닛(802)과 θ2 처리 유닛(803)은 라운드 처리 R(201)에서의 θ 처리 유닛(301)을 분리하여 얻어진다.
라운드 처리 R´(801) 내의 ρ 처리, χ 처리, ι 처리는 라운드 처리 R(201) 내의 처리와 유사하기 때문에, 그 설명은 생략한다.
π 처리 유닛(805)은 라운드 처리 R(201) 내의 π 처리 유닛(303)과 유사하다. 그러나, π 처리 유닛(805)은 스테이트 데이터를 유지한 후에 처리를 행하지 않고, 입력된 플레인 데이터로부터 시트 데이터를 출력한다. 상세는 후술한다.
이하에서는, θ1 처리, θ2 처리에 대해서 설명한다.
도 11은 스텝 θ1의 처리를 설명하는 도면이다. 스텝 θ1은 스텝 θ의 전반의 연산에 대응하고 있다. 이 스텝에서, 컬럼 합 계산 처리가 행해진다. 구체적으로는, 컬럼마다 "x축 방향으로 -1의 위치에 있는 컬럼의 비트의 합"과, "x축 방향으로 +1의 위치 및 z축 방향으로 -1의 위치에 있는 컬럼의 비트의 합"의 2개의 값의 합(θ 중간값으로 칭한다)을 계산하기 위한 처리이다. 5개의 시트 데이터를 수취한 후에, θ1 처리 유닛(802)은 각 컬럼에 대하여 1 비트의 θ 중간값을, 최대 5×64 비트의 θ 중간값을 출력한다. θ 중간값의 전체의 구조는 x-z 평면에 평행하고, 폭 5 비트, 높이 1 비트, 깊이 64 비트의 평면 구조로 표현된다.
도 12는, 스텝 θ2의 처리를 설명하는 도면이다. 스텝 θ2는 스텝 θ의 후반의 연산에 대응하며, 컬럼 합 가산 처리를 실행하는 스텝이다. 즉, 스텝 θ2에서는, θ2 처리 유닛은 스텝 θ1에서 구한 θ 중간값을 각 비트에 가산한다.
상술한, 각 스텝(스텝 θ1 및 스텝 θ2)의 처리 내용으로부터, 각 스텝의 처리를 개시하는 데에 있어서 이하의 제약이 있는 것을 알 수 있다
· 스텝 θ1은 합의 계산이기 때문에, θ1 처리 유닛(802)은 스테이트 내의 각 시트가 입력될 때마다, 계산 도중의 θ 중간값을 갱신한다. 그로 인해, 전단의 계산 결과의 1개의 시트 데이터가 출력되면, θ1 처리 유닛(802)은 스텝 θ1의 처리를 개시할 수 있다.
· 스텝 θ2에서는, θ2 처리 유닛(803)은 스테이트 내의 각 플레인의 계산에서 스텝 θ1에서 계산된 θ 중간값을 가산한다. 스텝 θ2의 개시 시점에서 스텝 θ1은 완료하고 있기 때문에, θ2 처리 유닛(803)은 전단(레지스터)의 출력으로부터 1개의 플레인 데이터가 출력되는 때에 스텝 θ2의 처리 결과의 출력을 개시할 수 있다.
· 스텝 ρ는 레인마다 서로 독립된 계산이다. 그로 인해, θ2 처리 유닛(803)이 전단(스텝 θ2)의 계산 결과의 1개의 플레인 데이터를 출력하면, ρ 처리 유닛(804)은 스텝 ρ의 처리를 개시할 수 있다.
· 스텝 π에서, π 처리 유닛(805)은 스테이트 내의 각 레인을 재배열한다. 단, 1개의 플레인의 입력으로부터, 1개의 시트의 출력이 얻어질 수 있다. 그로 인해, ρ 처리 유닛(804)이 전단(스텝 ρ)의 계산 결과의 1개의 플레인 데이터를 출력하면, π 처리 유닛(805)은 스텝 π의 처리를 개시할 수 있다.
· 스텝 χ에서는, 스테이트 내의 각 레인의 계산에서, χ 처리 유닛(806)은 x축 방향으로 +1의 레인 및 x축 방향으로 +2의 레인을 사용한다. 그로 인해, χ 처리 유닛(806)은 3개의 시트 데이터가 수취된 후에 스텝 χ의 처리를 개시할 수 있다.
· 스텝 ι는 레인마다 서로 독립된 계산이다. 그로 인해, χ 처리 유닛(806)이 전단(스텝 χ)의 계산 결과의 1개의 시트 데이터를 출력하면, ι 처리 유닛(807)은 스텝 ι의 처리를 개시할 수 있다.
스텝 π에서, π 처리 유닛(805)은 플레인 데이터의 입력을 수취하고, 시트 데이터를 출력하기 때문에, 스테이트 데이터를 유지할 필요가 없어지고, 스루풋이 향상될 수 있다.
또한, 스텝 θ2, ρ 및 π에서는 플레인 단위로 처리가 행해지고, 스텝 χ 및 ι에서는 시트 단위로 처리가 행해지므로, 스루풋이 향상될 수 있다.
이하에서는, π 처리 유닛(805)이 플레인 데이터의 입력을 수취하고, 시트 데이터를 출력하고, 라운드 처리가 스텝 θ2, ρ 및 π에서는 플레인 단위로 행해지고, 스텝 χ 및 ι에서는 시트 단위로 행하는 구성에 대해서 설명한다.
도 16은 제1 실시 형태에 따른 KECCAK 알고리즘의 구현예의 개략 구성을 도시하는 도면이다. 이 예에서는, 입력 데이터(1901)로부터의 레인 구조가 단위로서 입력된다. 단, 입력 데이터의 순서는 (x, y)= (0, 0), (0, 1), (0, 2), …와 같이 y 방향으로 순서대로 미리 결정되는 것으로 한다. 레지스터(1908)는 입력 데이터(1901)인 레인 구조의 데이터를 4개 유지하고, 레지스터(1908)가 제5 레인 구조 데이터를 수취하는 때에 시트 구조 데이터를 단위로서 출력한다. 또한, 레지스터(1908)가 적어도 제1 시트 구조 데이터의 생성을 가능하게 하는 데이터를 유지하면, 레지스터(1908)가 제1 시트 구조 데이터를 출력하도록 구성해도 된다. 출력 데이터(1907)는 계산이 완료되었을 때에 시트 구조의 단위로 출력된다.
배타적 논리합(XOR) 연산자(1902)는 라운드 처리를 24회 실행하는 때마다 메시지 블록과 내부 데이터의 배타적 논리합을 계산한다. 레지스터(1903)는 내부 데이터 전체를 유지한다. 레지스터(1903)는 입력된 시트 구조의 입력 데이터를 유지하고, 플레인 구조의 출력 데이터를 출력한다. 회로(1904)는 스텝 θ2, ρ 및 π에서의 처리를 위한 것이다. 회로(1904)에 입력되는 데이터는 플레인 구조의 데이터이며, 회로(1904)로부터 출력되는 데이터는 시트 구조의 데이터이다. 상세한 내용은 후술한다. 회로(1905)는 스텝 χ 및 ι에서의 처리를 위하여 제공된다. 회로(1906)는 스텝 θ1에서의 처리를 위한 것이다.
도 17은 도 16의 구성을 보다 상세하게 도시하는 도면이다. 입력 데이터(2001)는 도 16의 입력 데이터(1901)와 같다. 레지스터(2009)는 입력 데이터(2001) 중 적어도 제1 시트 구조의 데이터를 유지하고, 시트 구조를 단위로 하여 출력한다. 레지스터(2009)는 도 16의 레지스터(1908)과 같다. 레지스터(2009)는 매 클럭마다 1개의 시트 구조를 단위로서 출력하고, x 좌표의 오름차순으로 시트 구조 데이터를 출력한다. 멀티플렉서(2002)가 입력 데이터와 내부 스테이트의 배타적 논리합의 계산을 할 때는, 멀티플렉서(2002)는 입력 데이터를 그대로 출력하고, 그 이외에는 0을 출력한다.
레지스터(2004)는 도 16에 도시된 레지스터(1903)와 유사하게 내부 데이터 전체를 유지한다. 회로(2005)는 스텝 θ2, ρ 및 π에서 계산한다 (이하, θ2 & ρ & π 회로(2005)라고 칭한다). 상술한 바와 같이, θ2 & ρ & π 회로(2005)에는, y 좌표의 오름차순으로 플레인 구조의 데이터가 입력되고(y=0, 1, 2, 3, 4의 순서), θ2 & ρ & π 회로(2005)는 x 좌표의 오름차순으로 시트 구조의 데이터를 출력한다(x=0, 1, 2, 3, 4의 순서).
회로(2006)는 스텝 χ 및 ι에서의 처리를 위한 것이며(이하, χ & ι 회로(2006)로 칭한다)이며, 계산 결과의 1개의 시트 구조 데이터를 단위로서 출력한다. 멀티플렉서(2007)는 해시값의 계산 개시 시에는 초기화를 위하여 0을 출력하고, 그 이외의 경우에는 계산 도중의 데이터를 출력한다.
회로(2008)는 스텝 θ1의 처리를 위한 것이며(이하, θ1 회로(2008)로 칭한다), 회로(2008)가 5개의 시트 데이터 입력을 수취하면 5×64 비트의 중간값(θ 중간값)을 출력한다.
도 18은 레지스터(2004)의 구현예를 도시하는 도면이다. 조합 회로(2102)는 입력 데이터(2101)인 1개의 시트 데이터를 5개의 레인 데이터로 분할해서 5개의 레인 데이터를 출력한다. 멀티플렉서(2103)는 짝수 회의 라운드와 홀수 회의 라운드에 대하여 시프트 방향을 세로 방향과 가로 방향으로 교대로 전환한다(도 18에서, 멀티플렉서(2103)와 동일한 형상의 모든 기호는 그와 유사하게 동작한다). 레지스터(2104)는 1단에서 1개의 레인의 정보를 기억하는 5×5단의 메쉬 구조이다. 레지스터(2104)는 매 클럭마다 5개의 레인 데이터(1개의 시트 혹은 1개의 플레인 데이터)의 입력을 수신하고, 5개의 레인 데이터를 출력한다. 조합 회로(2105)는 레지스터(2104)의 최종 단으로부터 출력된 5개의 레인의 데이터(5개의 레인은 R0, R1, R2, R3, R4를 포함하거나, 혹은 5개의 레인은 R0, R5, R10, R15, R20을 포함함)를 1개의 플레인 데이터로서 출력한다. 출력 데이터(2106)가 나타나 있다.
도 23a 및 23b는 스텝 π의 처리의 특성을 설명하는 도면이다.
도 23a는 스텝 π의 처리를 실행하기 전의 데이터의 예를 나타낸다. π 처리에 의해 각 레인이 재배열되는 위치의 이해를 쉽게 하기 위해서, 각 레인에 연속하는 번호가 할당된다. 도 23b는 스텝 π의 처리를 실행한 후의 데이터의 예를 나타낸다. 본 도면에서, y=0에서 1개의 플레인 데이터(도 23a의 데이터(231))의 비트가 모두 x=0에서 1개의 시트 데이터의 위치(도 23b의 데이터(232))에 재배열되어 있는 것을 알 수 있다. y=1, 2, 3, 4의 데이터도 유사하게 재배열된다. 즉, 스텝 π의 처리를 실행하면, y=i(i=0, 1, 2, 3, 4)의 각 플레인 데이터는 x=i의 1개의 시트 데이터로서 출력된다.
이상 설명한 스텝 π의 처리의 특성을 사용함으로써, 스텝 π의 처리를 위해서 모든 데이터(즉, 5개의 플레인 구조 데이터)를 레지스터에 유지할 필요가 없고, 이로 인해 1개의 플레인의 입력으로부터 1개의 시트의 출력을 얻는 것이 가능하게 된다.
도 24a, 24b, 24c, 24d 및 24e는 레지스터(2004)에 의해 행해지는 시트-플레인 단위 변환을 설명하는 도면이다. 레지스터(2004)에 대한 입력 데이터는 상술한 바와 같이 1클럭에 대해서 1개의 시트 데이터이다. 도 24a, 24b, 24c는 각각 제1 클럭에서 시트 데이터가 입력되었을 때, 제2 클럭에서 시트 데이터가 입력되었을 때, 제5 클럭에서 시트 데이터가 입력되었을 때의 레지스터(2004)의 설명도이다. 도 24a, 24b, 24c에 나타낸 바와 같이, 레지스터(2004)는 5개의 클럭에 걸쳐 5개의 시트 데이터(1개의 스테이트 데이터)의 y 방향(x 방향)에서의 입력을 수신한다. 도 24d는 5개의 시트 데이터의 입력을 수신한 후, 레지스터(2004)가 제1 플레인 데이터를 출력할 때의 레지스터(2004)의 설명도이다. 도 24e는 레지스터(2004)가 제2 플레인 데이터를 출력할 때의 레지스터(2004)의 설명도이다. 레지스터(2004)는 5개의 시트 데이터의 입력을 수신한 후 x 방향(y 방향)의 매 클럭에서의 5개의 레인 데이터 각각을 출력하여, 1개의 플레인 데이터를 제공한다. 레지스터(2004)는 이상의 흐름에서 시트-플레인 변환을 행한다.
또한, 레지스터(2004)에의 데이터 입력은 입력 방향을 x축과 y축 간에 교대로 전환하면서 행한다. 예를 들어, y축 방향으로 5개의 플레인 데이터가 입력되고, 그 후, x축 방향으로 5개의 시트 데이터가 입력된다.
도 19는 θ2 & ρ & π 회로(2005)의 구현예를 도시하는 도면이다. θ2 & ρ & π 회로(2005)는 대상 플레인에 대하여 회로(2008)가 미리 계산해 둔 θ 중간값을 사용하여 출력 데이터를 계산한다. 이 처리는 스텝 π의 처리를 포함하기 때문에, 출력 데이터는 시트 구조를 가진다.
전술한 바와 같이, θ2 & ρ & π 회로(2005)는 입력 데이터(2201)로서 매 클럭의 1개의 플레인 데이터의 입력을 수신한다. 입력 데이터(2202)는 θ1 회로(2008)로부터 입력되고, θ 중간값에 상당한다.
배타적 논리합(XOR) 연산자(2203)의 처리는 상술한 스텝 θ2의 연산에 상당한다. 논리 회로(ρ 회로)(2204)는 스텝 ρ의 연산을 행한다. 논리 회로(π 회로)(2205)는 스텝 π의 연산을 행하며, 1개의 플레인의 입력으로부터 1개의 시트를 출력할 수 있다. 출력 데이터(2206)는 매 클럭마다 출력되는 1개의 시트 데이터이다.
도 25는 π 회로(2205)의 구현예를 도시하는 도면이다. 상술한 바와 같이, π 회로(2205)는 입력 데이터(2601)로서 매 클럭마다 1개의 플레인 데이터를 수신한다. 조합 회로(2602)는 입력 데이터(2601)인 1개의 플레인 데이터를 5개의 레인 데이터로 분할해서 5개의 레인 데이터를 출력한다.
조합 회로(2603)는 스텝 π의 재배열을 행한다. 조합 회로(2603)는 x축 방향으로 배열하는 5개의 레인 데이터를, 도 5b의 테이블에 따라, y축 방향으로 배열하는 5개의 레인 데이터로 재배열하고, 그 5개의 레인 데이터를 출력한다.
조합 회로(2604)는 5개의 레인 데이터를 1개의 시트 데이터로서 출력한다. 출력 데이터(2605)는 매 클럭마다 1개의 시트 데이터를 출력한다.
도 20은 χ & ι 회로(2006)의 구현예를 도시하는 도면이다. χ & ι 회로(2006)는 대상 시트 데이터와, 당해 대상 시트로부터 x축 방향으로 +1과 +2의 위치의 2개의 시트를 사용하여 출력 데이터를 계산한다.
상술한 바와 같이, χ & ι 회로(2006)는 입력 데이터(2301)로서 매 클럭마다 1개의 시트 데이터의 입력을 수신한다. 멀티플렉서(2302))는 처리의 개시로부터 최초의 5개의 클럭 동안에는 입력 데이터(2301)를 그대로 출력하고, 계속되는 2개의 클럭 동안에는 레지스터(2304)로부터의 데이터를 출력한다.
레지스터(2303)는 1단에서 1개의 시트의 정보를 기억하는 2단 구성이다. 레지스터(2304)는 1단에서 1개의 시트의 정보를 기억하는 2단 구성이다. 레지스터(2304)는 x=0과 x=1에서의 시트의 정보를 기억하고 있다.
조합 회로(2305)는 상술한 스텝 χ 및 스텝 ι의 연산을 행하는 논리 회로이다. 출력 데이터(2306)는 1개의 시트가 단위로서 출력된다.
상술한 바와 같이, θ2 & ρ & π 회로(2005)는 플레인 단위의 처리를 위한 것이며, χ & ι 회로(2006)는 시트 단위의 처리를 위한 것이다. 이에 의해, θ2 & ρ & π 회로(2005)의 출력으로부터 χ & ι 회로(2006)의 입력까지의 경로에는 조합 회로만 접속되고 있다. 즉, 래치 회로를 경로에 포함하지 않는다. 이에 의해, 1 클럭 내에서의 경로를 통해 데이터를 통과시키는 것이 가능하다.
이상 설명한 바와 같이, 제1 실시 형태에 따르면, π 처리 유닛(805)은 플레인의 입력을 수신하고, 시트를 출력하고, 라운드내의 처리 단위를 플레인과 시트를 단위로서 수행한다. 이에 의해, 라운드 내에서의 처리가 파이프라인화될 수 있다.
또한, 이상 설명한 바와 같이, 제1 실시 형태에 따르면, 라운드 개시 시의 입력 처리의 단위는 플레인이고, 라운드 종료 시의 출력 처리 단위는 시트다. 그러나, 레지스터(2004)의 입력으로부터 출력까지 플레인-시트 단위 변환이 행해지므로, 입력 처리의 단위는 다음 라운드의 개시의 플레인의 단위일 할 수 있다.
또한, 제1 실시 형태에서는 θ1 회로(2008)에의 입력 단위를 시트 구조로 했지만, 입력 단위를 플레인 구조로 해도 된다. 그 경우, θ1 회로(2008)는, 플레인 데이터를 5개 수신한 후에, 5×64 비트의 θ 중간값을 출력한다. 단, θ1 회로(2008)에의 입력 단위를 시트 구조로 한 경우, θ1 회로(2008)는 매 입력마다 θ 중간값을 순차적으로 계산할 수 있는 효과가 있다.
도 14a는 제1 실시 형태에 따른 구현예에서의 각 모듈의 동작 타이밍 차트이다. θ2 & ρ & π 회로(2005) 및 χ & ι 회로(2006)는 파이프라인 처리를 위하여 구성된다. θ1 회로(2008)는 5개의 시트 데이터의 입력으로부터 θ 중간값을 계산할 수 있으므로, 5 클럭 걸린다. θ2 & ρ & π 회로(2005)가 1개의 시트 데이터를 출력하고 나서 2 클럭 후에, χ & ι 회로(2006)는 1개의 시트 데이터를 출력할 수 있다. 즉, χ & ι 회로(2006)는 3개의 시트를 수신했을 때에 처리를 개시할 수 있다. 이에 의해, θ2 & ρ & π 회로(2005)와 χ & ι 회로(2006)의 병렬 동작을 실현할 수 있다. 또한, 1회의 라운드 처리에 걸리는 시간은 7 클럭이다.
이하에서는, 상술한 제1 실시 형태의 구현예와 비교하여, 사양에 따른 알고리즘에 의해 레인 데이터에 대해서 단위로서 처리하는 구현예에 대해서 설명한다.
도 15는 KECCAK 알고리즘에 의해 사양에 따라 레인에 대해서 단위로서 처리가 행해지는 경우의 구현예의 개략 구성을 도시하는 도면이다. 5개의 스텝(θ, ρ, π, χ, ι)의 처리는 상술한 것과 유사하기 때문에 그 설명은 생략한다.
KECCAK-f는 입력 데이터(1801)로부터 매 클럭마다 1개의 레인 데이터(64 비트 길이의 데이터)를 수신한다. KECCAK-f는 도 2f에 도시된 순서대로 1개의 스테이트 데이터 내의 레인 데이터를 수신한다.
배타적 논리합 유닛(1802)은 라운드 처리를 24회 실행할 때마다 메시지 블록과 내부 데이터의 배타적 논리합을 계산하는 연산자이다.
레지스터(1803)는 스테이트 데이터로서 표현되는 내부 데이터 전체를 유지하는 레지스터이다. 처리 블록(π 회로)(1804)은 스텝 π를 실행한다. 단, 상술한 바와 같이, 스텝 π의 처리는, 스텝 ρ의 처리를 완료한 후에만 실행가능하다. 처리 블록(θ 회로)(1805)은 스텝 θ를 실행하고, 처리 블록(ρ 회로)(1806)은 스텝 ρ를 실행한다.
처리 블록(χ 회로)(1807)은 스텝 χ를 실행하고, 처리 블록(ι 회로)(1808)은 스텝 ι를 실행한다. 멀티플렉서(1809)는 라운드 처리 전반에서는 처리 블록(1806)으부터 입력된 데이터를 출력하고, 그 후반에서는 처리 블록(1808)으로부터의 데이터를 출력한다. KECCAK-f는 계산이 완료했을 때에 1개의 레인의 출력 데이터(1810)를 출력한다.
도 14b는 사양에 따른 알고리즘에 의해 레인을 단위로서 처리하는 경우의 각 모듈의 동작 타이밍 차트이다. θ 회로(1805)와 ρ 회로(1806)의 쌍과, χ 회로(1807)와 ι 회로(1808)의 쌍은 상이한 기간에 동작하고, 동시에는 동작하지 않는다. 1회의 라운드 처리에 걸리는 시간은 51 클럭이다.
도 14a와 도 14c를 비교하면 알 수 있는 바와 같이, 제1 실시 형태에 따른 구현예의 구성을 사용함으로써 처리 스루풋이 향상될 수 있음을 알 수 있다.
즉, 이하와 같이 말할 수 있다.
· θ2 & ρ & π 회로(2005) 및 χ & ι 회로(2006)의 2개의 처리 회로는 병렬로 동작하고, 이에 의해 회로의 이용 효율이 향상가능하다.
· 보다 적은 클럭의 수(적은 시간) 내에 1회의 라운드 처리를 실행하는 것이 가능하게 된다.
본 발명의 제2 실시 형태에 따른 해시값 생성 장치로서, SHA-3(KECCAK 알고리즘)의 해시값을 생성하는 장치를 예로 들어서 이하에 설명한다. 이하의 설명에서, 구체적인 데이터 길이나 구체적인 비트 값이 나타나고 있을 경우가 있지만, 본 발명은 이들 구체적인 값에 한정되는 것이 아니다. KECCAK 알고리즘 및 데이터 구조는 제1 실시 형태와 마찬가지이며, 따라서 제1 실시 형태와 상이한 점에 대해서 설명한다.
라운드 처리 R'(901)에 대해서 설명한다. 라운드 처리 R´(901)는 본 실시 형태에서 사용하는 처리이며, 라운드 처리 R(201)와 동일한 결과가 되도록 설계되고 있다. 그러나, 라운드 처리 R´(901)의 처리 내용은 KECCAK 알고리즘의 사양과는 상이하다.
도 9b는 라운드 처리 R´(901)의 개요를 설명하는 도면이다. 라운드 처리 R´(901)는 처리 결과가 라운드 처리 R(201)과 같아지게 설계되고 있다. 라운드 처리 R´(901)에서는 입력 데이터에 대하여 6개의 스텝의 처리(θ1 처리 유닛(902), π 처리 유닛(903), θ2´ 처리 유닛(904), ρ´ 처리 유닛(905), χ 처리 유닛(906), ι 처리 유닛(907))가 실시되어 출력 데이터를 생성한다.
여기서, π 처리 유닛(903), χ 처리 유닛(906), ι 처리 유닛(907)은 라운드 처리 R(201)의 π 처리 유닛(303), χ 처리 유닛(304), ι 처리 유닛(305)에 의해서 행해지는 것과 유사하다. ρ´ 처리 유닛(905)은 라운드 처리 R(201)에서의 ρ 처리 유닛(302)과 동일하게 z축 방향으로 각 비트의 값을 시프트하는 처리를 행하지만, 그 값이 시프트하는 비트수가 상이하다. θ1 처리 유닛(902)과 θ2´ 처리 유닛(904)은 라운드 처리 R(201)에서의 θ 처리 유닛(301)을 분할하여 얻어지는 것이다.
라운드 처리 R´(901) 내의 처리에서 χ 처리와 ι 처리는 라운드 처리 R(201)에서와 유사하기 때문에, 그 설명은 생략한다.
π 처리 유닛(903)은 라운드 처리 R(201) 내의 π 처리 유닛(303)과 유사하다. 그러나, π 처리 유닛(903)은 스테이트 데이터를 유지한 후에는 처리를 행하지 않고, 플레인 데이터 수신하고, 그 후에 시트 데이터를 출력한다. 상세한 내용은 제1 실시 형태와 유사하다.
라운드 처리 R´(901)의 θ1 처리는 라운드 처리 R´(801)의 θ1 처리와 유사하기 때문에, 그 설명은 생략한다. 이하에서는 ρ´ 처리, θ2´ 처리에 대해서 설명한다.
도 10a는 스텝 ρ´의 처리(ρ´ 처리 유닛(905))를 설명하는 도면이다. 스텝 ρ´에서는, ρ´ 처리 유닛(905)은, 스텝 ρ과 마찬가지로, z축 방향으로 각 비트의 값을 순환 시프트하는 처리를 행한다. 단, 각 레인에서 값이 순환 시프트되는 비트수는 스텝 ρ와는 상이하고, 도 10b에 나타나고 있다. 또한, ρ´ 처리를 실행하기 위해서, 유지부는 도 10c에 도시한 바와 같은 시프트량을 나타내는 테이블을 미리 유지해 두고, ρ´ 처리 유닛(905)은 유지되고 있는 테이블을 사용하여 ρ´ 처리를 실행한다. 이 테이블은 π 처리를 고려하여 결정된다. 상세한 내용은 후술한다.
라운드 처리 R´(901)의 처리 결과와 라운드 처리 R(201)의 처리 결과가 동일한 것을 설명하기 위해서, 먼저, 라운드 처리 R(201)의 처리 결과와 라운드 처리 R´´(911)의 처리 결과가 동일한 것을 설명한다.
도 9c는 라운드 처리 R´´(911)의 도면이다. 라운드 처리 R´´(911)에서는, 입력 데이터에 대하여 5개의 스텝의 처리(θ 처리 유닛(912), π 처리 유닛(913), ρ´ 처리 유닛(915), χ 처리 유닛(916), ι 처리 유닛(917))을 실시해서 출력 데이터를 생성한다. 여기서, θ 처리 유닛(912), π 처리 유닛(913), χ 처리 유닛(916), ι 처리 유닛(917)은 각각 라운드 처리 R(201)의 θ 처리 유닛(301), π 처리 유닛(303), χ 처리 유닛(304), ι 처리 유닛(305)과 동일한 처리이다. ρ´ 처리 유닛(915)은 라운드 처리 R´(901)의 ρ´ 처리 유닛(905)과 유사하다.
라운드 처리 R(201)과 라운드 처리 R´´(911)를 비교하면, 이들은, 라운드 처리 R(201)에서는 ρ 처리 유닛(302), π 처리 유닛(303)이 이 순서대로 처리를 실행하는 것에 대해, 라운드 처리 R´´(911)에서는 π 처리 유닛(913), ρ´ 처리 유닛(915)이 이 순서대로 처리를 실행하는 점에서 상이하다.
여기서, 라운드 처리 R(201)의 스텝 ρ에서는, ρ 처리 유닛(302)은 레인마다 정해지는 룰에 따라 z축 방향으로 값을 시프트하고, π 처리 유닛(303)은 각 레인을 재배열한다. 한편, 라운드 처리 R´´(911)에서는, π 처리 유닛(913)은 각 레인을 재배열하고(스텝 π의 처리), 그 후, ρ´ 처리 유닛(915)은 재배열 처리를 고려하여 레인마다 정해지는 룰에 따라 z축 방향으로 값을 시프트한다(스텝 ρ´의 처리). 즉, 라운드 처리 R´´(911)에서는, 스텝 ρ´ 전에 스텝 π를 행하지만, ρ´ 처리 유닛(915)에 의해 z축 방향으로 값이 시프트되는 시프트량을, 스텝 π의 처리를 고려해서 변경함으로써, 라운드 처리 R´´(911)의 처리 결과와 라운드 처리 R(201)의 처리 결과가 동일해진다.
도 10c는 스텝 ρ´에서 사용되는 각 레인의 시프트량을 나타내는 테이블이다.
도 10c에 나타내고 있는 테이블의 생성 방법에 대해서 구체적으로 설명한다. 먼저, 라운드 처리 R(201)에 대해서 생각한다. 라운드 처리 R(201)에서는, ρ 처리 유닛(302)과 π 처리 유닛(303)이 이 순서대로 처리를 행한다. 도 4b의 숫자는 스텝 ρ에서의 시프트량이다. 예를 들어 x=0, y=4의 위치에서의 레인의 시프트량은 18비트이다. 이어서, π 처리에 의한 레인 재배열을 도 5a 및 5b를 사용해서 확인한다. π 처리 유닛(303)은 x=0, y=4의 위치의 레인을 x=4, y=2의 위치로 이동시킨다.
이어서, 라운드 처리 R´´(911)에 대해서 생각한다. 라운드 처리 R´´(911)에서는, π 처리 유닛(913)과 ρ´ 처리 유닛(915)이 이 순서대로 처리를 행한다. ρ´ 처리 전에 π 처리가 행하여지고 있으므로, ρ´ 처리 유닛(915)이 18비트만큼 값을 시프트해야 하는 레인은 x=4, y=2의 위치에 있는 레인이다. 따라서, 도 10b의 x=4, y=2의 위치에 있는 숫자는 18이다. 다른 레인의 시프트량도 마찬가지로 얻어져서 도 10b의 다른 숫자가 된다.
즉, 도 10c에 나타내는 스텝 ρ´에서 사용되는 각 레인의 시프트량을 나타내는 테이블은, π 처리의 재배열 처리를 고려하여 결정되는 테이블이다.
이어서, 라운드 처리 R´´(911)의 처리 결과와 라운드 처리 R´(901)의 처리 결과가 동일한 것을 설명한다.
여기서, π 처리 유닛(903), ρ´ 처리 유닛(905), χ 처리 유닛(906), ι 처리 유닛(907)은 각각 라운드 처리 R´´(911)에서의 π 처리 유닛(913), ρ´ 처리 유닛(915), χ 처리 유닛(916), ι 처리 유닛(917)과 유사한 처리를 행한다. θ1 처리 유닛(902), θ2´ 처리 유닛(904)은 θ 처리 유닛(912)을 분할하여 얻어지는 처리이다.
라운드 처리 R´´(911)와 라운드 처리 R´(901)를 비교하면, 이들은, 라운드 처리 R´´(911)에서는 θ 처리 유닛(912), π 처리 유닛(913)이 이 순서대로 처리를 실행하는 것에 대해, 라운드 처리 R´(901)에서는 θ1 처리 유닛(902), π 처리 유닛(903), θ2´ 처리 유닛(904)이 이 순서대로 처리를 실행하는 점이 상이하다.
여기서, 라운드 처리 R´´(911)에서는, 스텝 θ는 각 비트에 대하여 인접하는 2개의 컬럼의 합을 가산하는 스텝이며, 스텝 π는 각 레인을 재배열하는 스텝이다. 한편, 라운드 처리 R´(901)에서는, θ1 처리 유닛(902)은 각 비트에 대하여 인접하는 2개의 컬럼의 합을 구한다(스텝 θ1의 처리). 그 후, π 처리 유닛(913)은 각 레인을 재배열하고(스텝 π의 처리), θ2´ 처리 유닛(904)은 각 레인의 재배열을 고려하여 비트에 컬럼의 합을 가산한다(스텝 θ2´의 처리).
도 13a는 스텝 θ2´의 처리를 설명하는 도면이다. 스텝 θ2´는 스텝 θ의 후반의 연산에 대응하고, 컬럼 합 가산 처리를 실행하는 스텝이다. 즉, 스텝 θ2´는 스텝 θ1에서 구한 θ 중간값을 각 비트에 가산하는 스텝이다.
단, 스텝 θ2´ 전에 이미 스텝 π가 실행되는 것에 주의할 필요가 있다. 구체적으로는, 라운드 처리 R´´(911)의 스텝 θ(즉, 라운드 처리 R(201)의 스텝 θ)의 경우에는, 각 비트의 x 좌표와 그 각 비트의 계산에 사용되는 θ 중간값의 x 좌표는 동일하다. 그러나, 라운드 처리 R´(901)의 스텝 θ2´에서는, 각 비트의 x 좌표와 그 각 비트의 계산에 사용하는 θ 중간값의 x 좌표는 상이하고, 스텝 π의 각 레인의 재배열을 고려하여 x 좌표가 결정된다. 각 비트의 계산에 사용하는 θ 중간값의 x 좌표는 도 13b에 나타나 있다. 또한, 유지부는 θ2´ 처리의 각 비트의 계산에 사용되는 θ 중간값의 x 좌표를 제공하는 도 13c의 테이블을 미리 유지하고, θ2´ 처리 유닛(904)은 유지되고 있는 테이블을 사용하여 θ2´ 처리를 실행한다.
도 13c에 나타내고 있는 테이블의 생성 방법에 대해서 구체적으로 설명한다. 먼저, 라운드 처리 R´´(911)에 대해서 생각한다. 스텝 θ에서의 각 비트의 계산에 필요한 θ 중간값의 x 좌표는 각 비트의 x 좌표와 동일하다. 예를 들어, 스텝 θ에서, x=0, y=4의 위치의 비트는, x=0의 위치의 θ 중간값을 사용해서 계산된다. 이어서, 스텝 π에서의 레인 재배열을 도 5a 및 5b를 사용해서 확인한다. π 처리 유닛(913)은 x=0, y=4의 위치의 비트를 x=4, y=2의 위치로 이동시킨다.
이어서, 라운드 처리 R´(901)에 대해서 생각한다. θ2´ 처리 유닛(904)이 스텝 θ2´를 행할 때에 π 처리 유닛(903)은 스텝 π를 이미 행하였으므로, 스텝 θ2´에서 x=4, y=2의 위치에 있는 비트의 계산에 필요한 θ 중간값의 x 좌표는 x=0인 것을 알 수 있다. 그로 인해, 도 13b에 제공되는 숫자 중 x=4, y=2의 위치에 있는 숫자는 0이 된다. 다른 비트에서의 θ 중간값의 x 좌표도 마찬가지로 구해져서 도 13b의 다른 숫자가 된다.
즉, θ2´ 처리 유닛(904)이 스텝 θ2´를 행할 때의 θ 중간값의 x 좌표를 제공하는 도 13c의 테이블은 π 처리의 재배열 처리를 고려하여 결정되는 테이블이다.
이상 설명한 바와 같이, 라운드 처리 R(201)의 처리 결과와 라운드 처리 R´´(911)의 처리 결과는 동일하다. 또한, 라운드 처리 R´´(911)의 처리 결과와 라운드 처리 R´(901)의 처리 결과는 동일하다. 따라서, 라운드 처리 R´(901)의 처리 결과와 라운드 처리 R(201)의 처리 결과는 동일하다.
상술한, 각 스텝(스텝 θ1, θ2´, ρ´)의 처리 내용으로부터, 각 스텝의 처리를 개시하는 데 있어서 이하의 제약이 있는 것을 알 수 있다
· 스텝 θ1에서는, θ1 처리 유닛(902)은 합을 계산하기 때문에, θ1 처리 유닛(902)은 스테이트 내의 각 플레인이 입력될 때마다, 계산 도중의 θ 중간값을 갱신한다. 그로 인해, 전단의 계산 결과의 1개의 플레인 데이터가 출력된 시점에서, θ1 처리 유닛(902)은 스텝 θ1의 처리를 개시할 수 있다.
· 스텝 θ2´에서는, θ2´ 처리 유닛(904)은 스테이트 내의 각 플레인의 계산에서, 스텝 θ1에서 계산된 θ 중간값을 가산한다. 스텝 θ2´의 개시 시점에서 스텝 θ1이 완료되고 있기 때문에, 전단(스텝 π)의 계산 결과의 1개의 플레인 데이터가 출력된 시점에서, θ2´ 처리 유닛(904)은 스텝 θ2´의 처리 결과의 출력을 개시할 수 있다.
· 스텝 ρ´는 레인마다 서로 독립적인 계산이다. 그로 인해, θ2´ 처리 유닛(904)이 전단(스텝 θ2´)의 계산 결과의 1개의 플레인 데이터를 출력한 시점에서, ρ´ 처리 유닛(905)은 스텝 ρ´의 처리를 개시할 수 있다.
즉, 스텝 θ1, θ2´ 및 ρ´에서는, 전단의 스텝의 계산 결과 중 1개의 플레인 데이터가 출력된 시점에서 처리를 개시할 수 있다.
또한, 제2 실시 형태에서의 스텝 π, χ, ι의 처리 내용은, 제1 실시 형태에서 설명한 것과 동일하다. 이에 의해, 각 스텝의 처리를 개시하는 데 있어서 이하의 제약이 있는 것을 알 수 있다
· 스텝 π에서는, 스테이트 내의 각 레인을 재배열한다. 단, π 처리 유닛(903)은 1개의 플레인 데이터 입력으로부터 1개의 시트 데이터를 출력할 수 있다. 그로 인해, 전단(스텝 θ1)이 1개의 플레인의 계산 결과를 출력한 시점에서, π 처리 유닛(903)은 스텝 π의 처리를 개시할 수 있다.
· 스텝 χ에서는, 스테이트 내의 각 레인의 계산에서, χ 처리 유닛(906)은 x축 방향으로 +1의 레인 및 +2의 레인을 사용한다. 그로 인해, ρ´ 처리 유닛(905)이 전단(스텝 ρ´)의 계산 결과의 1개의 플레인 데이터를 출력하는 시점에서, χ 처리 유닛(906)은 스텝 χ의 처리를 개시할 수 있다.
· 스텝 ι는 레인마다 서로 독립적인 계산이다. 그로 인해, 전단(스텝 χ)의 계산 결과의 1개의 플레인 데이터가 출력된 시점에, ι 처리 유닛(907)은 스텝 ι의 처리를 개시할 수 있다.
스텝 π에서 플레인 데이터가 입력되고 시트 데이터가 출력되기 때문에, 스테이트 데이터를 유지할 필요가 없어지고, 스루풋이 향상될 수 있다.
또한, π 처리 유닛(903)은 플레인 단위로 처리를 행하고, 라운드 처리 R(201) 대신 라운드 처리 R´(901)를 사용한다. 이에 의해, 스루풋이 향상될 수 있다. 이하에서는, 스텝 π에서는 플레인 데이터가 입력되고, 시트 데이터가 그로부터 출력되고, 라운드 처리가 플레인 단위로 행해지는 구성에 대해서 설명한다.
도 21은 제2 실시 형태에 따른 KECCAK 알고리즘의 구현예의 구성을 도시하는 도면이다. 여기서, 입력 데이터(2401)의 순서는 (x, y)=(0, 0), (1, 0), (2, 0), ….와 같이 x 방향으로 순차적인 것이 미리 결정되어 있다. 레지스터(2409)는 입력 데이터(2401)인 레인 구조의 데이터를 4개 유지하고, 레지스터(2409)가 제5 레인 구조 데이터를 수신하는 때에 플레인 구조 데이터를 단위로서 출력한다. 또한, 레지스터(2409)는 적어도, 레지스터(2409)가 제1 플레인 구조 데이터를 생성할 수 있는 데이터를 유지하면, 제1 플레인 구조 데이터를 출력하도록 해도 된다. 출력 데이터(2410)는, 계산이 완료했을 때에 시트 구조의 단위로서 출력된다.
멀티플렉서(2402)는, 멀티플렉서(2402)가 입력 데이터와 내부 스테이트의 배타적 논리합을 계산할 경우에는 입력 데이터를 그대로 출력하고, 그 이외의 경우에는 0을 출력한다.
회로(2404)는 스텝 π에서 계산한다(이하, π 회로(2404)라고 칭한다). π 회로(2404)는, 도 19에 도시된 π 회로(2205)와 유사하게, 플레인 구조 데이터의 입력을 수신하고, 시트 구조 데이터를 출력한다. 구체적으로는, y 좌표의 오름차순으로 플레인 구조 데이터가 입력되고(y=0, 1, 2, 3, 4의 순서), x 좌표의 오름차순으로 시트 구조 데이터를 출력한다(x=0, 1, 2, 3, 4의 순서).
레지스터(2405)는 내부 데이터 전체를 유지한다. 레지스터(2405)는 제1 실시 형태의 레지스터(2004)와 유사하기 때문에 그 설명은 생략한다.
회로(2406)는 스텝 θ2´, ρ´, χ, ι의 계산을 행하고(이하, θ2´ & ρ´ & χ & ι 회로(2406)로 칭한다), 1개의 플레인 구조 데이터의 계산 결과를 단위로서 출력한다. 멀티플렉서(2407)는 해시값의 계산 개시 시에는 초기화를 위하여 0을 출력하고, 그 이외의 경우에는 계산 도중의 데이터를 출력한다.
회로(2408)는 스텝 θ1의 처리를 위한 것이며(이하, θ1 회로(2408)라고 칭한다), 회로(2408)가 플레인 데이터를 5개 수신하면 5×64 비트의 중간값(θ 중간값)을 출력한다.
도 22는 θ2´ & ρ´ & χ & ι 회로(2406)의 구현예를 도시하는 도면이다. θ2´ & ρ´ & χ & ι 회로(2406)는 대상 플레인에 대하여 회로(2408)가 미리 계산해 둔 θ 중간값을 사용하여, 출력 데이터를 계산한다.
θ2´ & ρ´ & χ & ι 회로(2406)는 입력 데이터(2501)로서 매 클럭마다 1개의 플레인의 입력을 수신한다. 입력 데이터(2502)는 θ1 회로(2408)로부터 입력되고, θ 중간값에 상당한다.
배타적 논리합(XOR) 연산자(2503)에 의한 처리는 상술한 스텝 θ2´의 연산에 상당한다. 조합 회로(2504)는 상술한 스텝 ρ´, χ 및 ι의 연산을 실제로 행하는 논리 회로이며, 매 클럭마다 1개의 플레인 데이터를 출력한다. 출력 데이터(2505)는 매 클럭마다 출력되는 1개의 플레인 데이터이다.
상술한 바와 같이, π 회로(2404)는 플레인 단위로 처리를 행하고, 시트 구조 데이터를 출력하고, 레지스터(2405)는 시트 구조 데이터를 플레인 구조로 변환하고, θ2´ & ρ´ & χ & ι 회로(2406)는 플레인 단위로 처리를 행한다. θ2´ & ρ´ & χ & ι 회로(2406)의 출력으로부터 π 회로(2404)의 입력까지의 경로에는 조합 회로만이 접속되고 있다. 즉, 래치 회로가 경로에 포함되지 않는다. 따라서, 1 클럭 내에 데이터가 경로를 통과할 수 있다.
또한, 제2 실시 형태에서는 θ1 회로(2408)에의 입력 단위가 플레인 구조이지만, 입력 단위가 시트 구조이어도 된다. 그 경우, θ1 회로(2408)는 5개의 시트 데이터의 입력을 수신한 후에 5×64 비트의 θ 중간값을 출력한다.
도 14b는 제2 실시 형태에 따른 구현예의 각 모듈의 동작 타이밍 차트이다. θ2´ & ρ´ & χ & ι 회로(2406)로부터 π 회로(2404)까지의 출력은 파이프라인 처리되도록 구성된다. 라운드 처리 내의 모든 스텝의 각각의 처리는 1개의 플레인이 입력되었을 때에 개시될 수 있다. 즉, 라운드 처리 내의 모든 스텝은 병렬적으로 동작될 수 있다. 또한, 1회의 라운드 처리에 걸리는 시간은 5 클럭이다.
이하에서는, 상술한 제2 실시 형태의 구현예와 비교하여, 사양에 따른 알고리즘에 의한 레인 데이터를 단위로서 처리가 행해지는 구현예에 대해서 설명한다. 사양에 따른 알고리즘에 의하여 레인 데이터를 단위로서 처리가 행해지는 구현예는 제1 실시 형태에서 설명된 내용과 유사하기 때문에, 그 설명은 생략한다.
도 14c는 사양에 따라 다단위로서 레인 데이터에 대해서 처리가 행해지는 구현예의 각 모듈의 동작 타이밍 차트이다.
도 14b와 도 14c를 비교하면 알 수 있는 바와 같이, 제2 실시 형태에 따른 구현예의 구성을 사용함으로써 처리의 스루풋이 향상될 수 있다.
즉, 아래와 같이 말할 수 있다.
· π 회로(2404) 및 θ2´ & ρ´ & χ & ι 회로(2406)의 2개의 처리 회로는 병렬적으로 동작하고, 이에 의해 회로의 이용 효율을 향상할 수 있다.
· 보다 적은 수의 클럭(보다 적은 시간) 내에서 1회의 라운드 처리를 실행하는 것이 가능하게 된다.
본 실시 형태에서 설명한 바와 같이, θ1 처리 동안에 처리 단위를 변환함으로써, 데이터를 유지하기 위한 시간을 감소시킬 수 있다.
본 실시 형태에 따르면, 해시값 생성의 스루풋을 향상시킬 수 있는 기술을 제공할 수 있다.
본 발명의 실시 형태는 전술한 본 발명의 하나 이상의 실시 형태의 기능을 실행하기 위해서 저장 매체(예를 들면, 비일시적 컴퓨터 판독가능 저장 매체)에 기록된 컴퓨터 실행가능 명령어를 판독해서 실행하는 시스템 또는 장치의 컴퓨터에 의해, 그리고, 예를 들면 전술한 하나 이상의 실시 형태의 기능을 실행하기 위해서 저장 매체로부터 컴퓨터 실행가능 명령어를 판독하여 실행함으로써 시스템 또는 장치의 컴퓨터에 의해 수행되는 방법에 의해서도 구현될 수 있다. 컴퓨터는 하나 이상의 CPU(central processing unit), MPU(micro processing unit) 또는 기타 회로를 포함할 수 있으며, 별개의 컴퓨터 또는 별개의 컴퓨터 프로세서의 네트워크를 포함할 수도 있을 것이다. 컴퓨터 실행가능 명령어는, 예를 들면 네트워크 또는 저장 매체로부터 컴퓨터에 제공될 수 있을 것이다. 저장 매체는, 예를 들면 하나 이상의 하드 디스크, RAM(random-access memory), ROM(read only memory), 분산 컴퓨팅 시스템의 저장소, 광 디스크(CD(compact disc), DVD(digital versatile disc) 또는 블루레이 디스크(BD)™ 등), 플래시 메모리 장치, 메모리 카드 등을 포함할 수도 있다.
본 발명이 예시적인 실시예를 참조하여 설명되었지만, 본 발명이 개시된 예시적인 실시예에 한정되지 않음을 이해하여야 한다. 아래의 청구범위의 범주는 모든 변경과, 등가 구조 및 기능을 포함하도록 최광의의 해석에 따라야 한다.
본 출원은 2013년 3월 7일 출원된 일본 특허 출원 제2013-045574호 및 2014년 1월 31일 출원된 일본 특허 출원 제2014-017413호의 이익을 주장하며, 상기 일본 특허 출원들은 그 전체가 본 명세서에서 참조로 인용된다.

Claims (19)

  1. 해시값 생성 장치로서,
    SHA-3 알고리즘(Secure Hash Algorithm 3)의 라운드 처리에 포함되는 θ 처리를 행하는 θ 처리 수단과,
    상기 라운드 처리에 포함되는 ρ 처리를 행하는 ρ 처리 수단과,
    상기 라운드 처리에 포함되는 π 처리를 행하는 π 처리 수단과,
    상기 라운드 처리에 포함되는 χ 처리를 행하는 χ 처리 수단과,
    상기 라운드 처리에 포함되는 ι 처리를 행하는 ι 처리 수단을 포함하고,
    상기 π 처리 수단은 플레인(plane)의 단위로 데이터의 입력을 수신하고, 상기 데이터에 대하여 π 처리를 행하며, 시트(sheet)의 단위로 데이터를 출력하는 해시값 생성 장치.
  2. 제1항에 있어서,
    데이터를 유지하는 유지 수단을 더 포함하고,
    상기 유지 수단은 시트의 단위의 데이터의 입력을 수신하고, 플레인의 단위의 데이터를 출력하는 해시값 생성 장치.
  3. 제2항에 있어서,
    상기 유지 수단은 5개의 시트를 유지한 후에 1개의 플레인을 출력하는 해시값 생성 장치.
  4. 제3항에 있어서,
    상기 θ 처리 수단은 x축 방향을 따른 비트의 합을 계산하는 θ1 처리 수단과, 계산된 상기 합을 미리 정해진 비트에 가산하는 θ2 처리 수단을 포함하는 해시값 생성 장치.
  5. 제4항에 있어서,
    상기 유지 수단에 5개의 시트가 입력되는 동안에, 상기 θ1 처리 수단이 θ1 처리를 행하는 해시값 생성 장치.
  6. 제2항에 있어서,
    상기 유지 수단은 상기 π 처리 수단에 의해 처리된 데이터를 유지하는 해시값 생성 장치.
  7. 제4항에 있어서,
    상기 라운드 처리에서, 상기 π 처리 수단은 상기 θ2 처리 수단과 상기 ρ 처리 수단이 처리를 행하기 전에 처리를 행하는 해시값 생성 장치.
  8. 제7항에 있어서,
    상기 θ2 처리 수단, 상기 ρ 처리 수단, 상기 χ 처리 수단 및 상기 ι 처리 수단은 플레인의 단위로 처리를 행하는 해시값 생성 장치.
  9. 제2항에 있어서,
    상기 유지 수단은 상기 ι 처리 수단에 의해 처리된 데이터를 유지하는 해시값 생성 장치.
  10. 제4항에 있어서,
    상기 θ2 처리 수단 및 상기 ρ 처리 수단은 플레인의 단위로 처리를 행하며,
    상기 χ 처리 수단 및 상기 ι 처리 수단은 시트의 단위로 처리를 행하는 해시값 생성 장치.
  11. 제1항에 있어서,
    상기 θ 처리 수단, 상기 ρ 처리 수단, 상기 π 처리 수단, 상기 χ 처리 수단 및 상기 ι 처리 수단을 사용하여 상기 라운드 처리를 행함으로써 얻어지는 해시값을 출력하는 출력 수단을 더 포함하는 해시값 생성 장치.
  12. 제1항에 있어서,
    상기 플레인은 x축 방향으로 m 비트, y축 방향으로 1 비트, z축 방향으로 s 비트를 가지는 구조의 데이터이며, 상기 시트는 x축 방향으로 1 비트, y축 방향으로 n 비트, z축 방향으로 s 비트를 가지는 구조의 데이터인 해시값 생성 장치.
  13. 제1항에 있어서,
    상기 θ 처리 수단은 x축 방향을 따른 비트의 합을 계산하고, 계산된 상기 합을 미리 정해진 비트에 가산하고,
    상기 ρ 처리 수단은 각 비트의 값을 z축 방향으로 시프트하고,
    상기 π 처리 수단은 x-y 평면 내에서 각 비트의 값을 재배열하고,
    상기 χ 처리 수단은 x축 방향의 비트 열을 사용하여 비트를 변환하고,
    상기 ι 처리 수단은 각 비트에 미리 정해진 값을 가산하는 해시값 생성 장치.
  14. x축 방향으로 m 비트, y축 방향으로 n 비트, z축 방향으로 s 비트를 가지는 구조의 데이터가 처리되는 해시 알고리즘의 라운드 처리를 행하는 해시값 생성 장치로서,
    x축 방향에서의 비트의 합을 계산하고, 계산된 상기 합을 미리 정해진 비트에 가산하는 제1 처리 수단과,
    z축 방향으로 비트를 시프트하는 제2 처리 수단과,
    x-y 평면 내에서 각 비트를 재배열하는 제3 처리 수단과,
    x축 방향에서의 비트 열을 사용하여 비트를 변환하는 제4 처리 수단과,
    각 비트에 미리 정해진 값을 가산하는 제5 처리 수단을 포함하고,
    상기 제3 처리 수단은 x축 방향으로 m 비트, y축 방향으로 1 비트, z축 방향으로 s 비트를 각각 가지는 구조의 단위로 데이터의 입력을 수신하고, 상기 데이터에 대하여 x-y 평면 내에서 각 비트를 재배열하며, x축 방향으로 1 비트, y축 방향으로 n 비트, z축 방향으로 s 비트를 각각 가지는 구조의 단위로 데이터를 출력하는 해시값 생성 장치.
  15. 제14항에 있어서,
    데이터를 유지하는 유지 수단을 더 포함하고,
    상기 유지 수단은 x축 방향으로 1 비트, y축 방향으로 n 비트, z축 방향으로 s 비트를 각각 가지는 구조의 단위로 데이터의 입력을 수신하고, x축 방향으로 m 비트, y축 방향으로 1 비트, z축 방향으로 s 비트를 가지는 구조의 단위로 데이터를 출력하는 해시값 생성 장치.
  16. 제15항에 있어서,
    상기 유지 수단은 x축 방향으로 1 비트, y축 방향으로 n 비트, z축 방향으로 s 비트를 가지는 구조의 데이터의 5개의 단위를 유지한 후에, x축 방향으로 m 비트, y축 방향으로 1 비트, z축 방향으로 s 비트를 가지는 구조의 데이터의 1개의 단위를 출력하는 해시값 생성 장치.
  17. 제16항에 있어서,
    상기 제1 처리 수단은 x축 방향에서의 비트 합을 계산하는 제6 처리 수단과, 계산된 상기 합을 상기 미리 정해진 비트에 가산하는 제7 처리 수단을 포함하는 해시값 생성 장치.
  18. 제17항에 있어서,
    상기 유지 수단이 x축 방향으로 1 비트, y축 방향으로 n 비트, z축 방향으로 s 비트를 가지는 구조의 데이터의 5개의 단위를 수신하는 기간 동안에, 상기 제6 처리 수단이 처리를 행하는 해시값 생성 장치.
  19. 제14항에 있어서,
    상기 제1 처리 수단, 상기 제2 처리 수단, 상기 제3 처리 수단, 상기 제4 처리 수단 및 상기 제5 처리 수단을 사용하여 상기 라운드 처리를 행함으로써 얻어지는 해시값을 출력하는 출력 수단을 더 포함하는 해시값 생성 장치.
KR1020157027625A 2013-03-07 2014-02-17 해시값 생성 장치 KR101964495B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
JP2013045574 2013-03-07
JPJP-P-2013-045574 2013-03-07
JP2014017413A JP6113091B2 (ja) 2013-03-07 2014-01-31 ハッシュ値生成装置
JPJP-P-2014-017413 2014-01-31
PCT/JP2014/054246 WO2014136594A1 (en) 2013-03-07 2014-02-17 Hash value generating device

Publications (2)

Publication Number Publication Date
KR20150128836A KR20150128836A (ko) 2015-11-18
KR101964495B1 true KR101964495B1 (ko) 2019-04-01

Family

ID=51491116

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157027625A KR101964495B1 (ko) 2013-03-07 2014-02-17 해시값 생성 장치

Country Status (6)

Country Link
US (1) US9973336B2 (ko)
EP (1) EP2965305B1 (ko)
JP (1) JP6113091B2 (ko)
KR (1) KR101964495B1 (ko)
CN (1) CN105009186B (ko)
WO (1) WO2014136594A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6238774B2 (ja) 2013-02-21 2017-11-29 キヤノン株式会社 ハッシュ値生成装置
US9800403B1 (en) 2016-09-30 2017-10-24 International Business Machines Corporation Message processing using extended output functions
WO2019208486A1 (ja) * 2018-04-26 2019-10-31 日本電信電話株式会社 秘密集約中央値システム、秘密計算装置、秘密集約中央値方法、およびプログラム
GB2582900A (en) 2019-03-18 2020-10-14 Pqshield Ltd Cryptography using a cryptographic state
RU2747517C1 (ru) * 2020-03-05 2021-05-06 федеральное государственное автономное образовательное учреждение высшего образования "Национальный исследовательский ядерный университет МИФИ" (НИЯУ МИФИ) Способ хеширования информации
GB2608999A (en) 2021-07-15 2023-01-25 Pqshield Ltd Cryptographic system for post-quantum cryptographic operations

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04148372A (ja) 1990-10-11 1992-05-21 Fujitsu Ltd ハッシュ値算出処理方式
JP4148372B2 (ja) * 1998-03-06 2008-09-10 財団法人鉄道総合技術研究所 鉄道用および舗装用の速硬性セメント系の注入材とコンクリート
WO2001029776A1 (en) * 1999-10-18 2001-04-26 Stamps.Com Cryptographic module for secure processing of value-bearing items
US7489779B2 (en) * 2001-03-22 2009-02-10 Qstholdings, Llc Hardware implementation of the secure hash standard
US7249255B2 (en) * 2001-06-13 2007-07-24 Corrent Corporation Apparatus and method for a hash processing system using multiple hash storage areas
JP5055993B2 (ja) 2006-12-11 2012-10-24 ソニー株式会社 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
US8290146B2 (en) 2007-01-19 2012-10-16 Mitsubishi Electric Corporation Ciphertext generating apparatus, cryptographic communication system, and group parameter generating apparatus
US8275125B2 (en) * 2008-04-21 2012-09-25 Tata Consultancy Services Ltd Method for designing a secure hash function and a system thereof
JP5414346B2 (ja) 2009-04-28 2014-02-12 三菱電機株式会社 データ処理装置
JP5447510B2 (ja) * 2009-05-11 2014-03-19 日本電気株式会社 タグ生成装置、タグ検証装置、通信システム、タグ生成方法、タグ検証方法および記録媒体
US20110040977A1 (en) * 2009-08-11 2011-02-17 Apple Inc. Sponge and hash functions using a rubik's cube puzzle process
KR101714108B1 (ko) * 2009-12-04 2017-03-08 크라이프토그라피 리서치, 인코포레이티드 검증가능 누출 방지 암호화 및 복호화
US8441391B2 (en) * 2010-05-05 2013-05-14 Roundtrip Llc Ultra-secure communication methods and apparatus
CN101872338B (zh) 2010-06-04 2012-08-29 杭州电子科技大学 一种认证协议中得到安全消息摘要的方法
JP5269137B2 (ja) 2011-04-07 2013-08-21 三菱電機株式会社 演算装置
WO2013089682A1 (en) 2011-12-13 2013-06-20 Intel Corporation Method and apparatus to process keccak secure hashing algorithm
CN104025502B (zh) * 2011-12-22 2017-07-11 英特尔公司 用于处理blake安全散列算法的指令处理器、方法以及系统
JP6238774B2 (ja) 2013-02-21 2017-11-29 キヤノン株式会社 ハッシュ値生成装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
E. B. Kavun and T. Yalcin, "A lightweight implementation of Keccak hash function for radio-frequency identification applications", Berlin Heidelberg International Workshop pp.258-269(2010.06.)*
G. Bertoni et al., Keccak implementation overview, [online] (http://keccak.noekeon.org/Keccak-implementation-3.2.pdf)(2012.05.29.)*
G. Bertoni et al., The Keccak reference, [online] (http://keccak.noekeon.org/Keccak-reference-3.0.pdf)(2011.01.14.)*

Also Published As

Publication number Publication date
WO2014136594A1 (en) 2014-09-12
EP2965305A4 (en) 2016-11-16
CN105009186A (zh) 2015-10-28
EP2965305B1 (en) 2020-10-28
CN105009186B (zh) 2018-03-02
JP2014197169A (ja) 2014-10-16
US20160013932A1 (en) 2016-01-14
JP6113091B2 (ja) 2017-04-12
KR20150128836A (ko) 2015-11-18
US9973336B2 (en) 2018-05-15
EP2965305A1 (en) 2016-01-13

Similar Documents

Publication Publication Date Title
KR101964495B1 (ko) 해시값 생성 장치
KR101749528B1 (ko) 해시 값 생성 장치
JP6058245B2 (ja) 乱数拡大装置、乱数拡大方法及び乱数拡大プログラム
JP2013126221A (ja) 暗号化鍵生成装置およびプログラム
KR20160106570A (ko) 블록 마이닝 방법 및 장치
US9886597B2 (en) Method for encoding data on a chip card by means of constant-weight codes
US9875362B2 (en) Hash value generation apparatus
JP2009528559A (ja) Sms4暗号アルゴリズムを実現する暗号化および復号化処理方法とそのシステム
EP3202045A1 (en) Method and device for calculating a crc code in parallel
US9619206B2 (en) Pseudo-random bit sequence generator
JP2016514315A (ja) 素数生成のための方法およびデバイス
JP2015019276A (ja) 記憶装置、crc生成装置およびcrc生成方法
WO2015133095A1 (ja) パリティ検査符号生成装置、符号化方法、符号化装置および記録媒体
JP3205276U (ja) 一様独立乱数の乗算合同法高精度生成方法
JP2015114429A (ja) ハッシュ値生成装置およびその制御方法
Bhat Non-isomorphic solutions of some balanced incomplete block designs. II
RU2009138613A (ru) Устройство для формирования остатка по заданному модулю
Yüce Tok On the efficiency of lattice-based cryptographic schemes on graphical processing unit
Kirshtein Automorphism groups of real Cayley-Dickson loops
JP2017068744A (ja) 圧縮ストア処理装置、および圧縮ストア処理方法
JP2014029358A (ja) 演算装置、その方法およびプログラム

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
J201 Request for trial against refusal decision
J301 Trial decision

Free format text: TRIAL NUMBER: 2017101002436; TRIAL DECISION FOR APPEAL AGAINST DECISION TO DECLINE REFUSAL REQUESTED 20170519

Effective date: 20181211

S901 Examination by remand of revocation
GRNO Decision to grant (after opposition)
GRNT Written decision to grant