KR20100047592A - Sha 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치 - Google Patents

Sha 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치 Download PDF

Info

Publication number
KR20100047592A
KR20100047592A KR1020080106552A KR20080106552A KR20100047592A KR 20100047592 A KR20100047592 A KR 20100047592A KR 1020080106552 A KR1020080106552 A KR 1020080106552A KR 20080106552 A KR20080106552 A KR 20080106552A KR 20100047592 A KR20100047592 A KR 20100047592A
Authority
KR
South Korea
Prior art keywords
round
register
output
intermediate data
value
Prior art date
Application number
KR1020080106552A
Other languages
English (en)
Inventor
김무섭
박영수
박지만
김영세
주홍일
전성익
Original Assignee
한국전자통신연구원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국전자통신연구원 filed Critical 한국전자통신연구원
Priority to KR1020080106552A priority Critical patent/KR20100047592A/ko
Priority to US12/483,369 priority patent/US20100104098A1/en
Priority to JP2009148791A priority patent/JP2010107947A/ja
Publication of KR20100047592A publication Critical patent/KR20100047592A/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/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic 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 using cryptographic hash functions
    • H04L9/3239Cryptographic 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 using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • 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
    • 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/30Compression, e.g. Merkle-Damgard construction
    • 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/80Wireless

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

본 발명은 SHA 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치에 관한 것이다.
본 발명은, 메시지 스케줄 연산을 수행 시 하나의 덧셈기를 이용하여 순차적으로 메시지 스케줄 연산을 수행한다. 또한, 메시지 스케줄 연산 시 입력되는 연산 데이터를 저장하는 메모리를 17번째 라운드부터는 메시지 스케줄 연산에 의해 생성되는 중간 데이터를 저장하기 위해 사용한다. 또한, 본 발명은 메시지 압축 연산을 수행 시에도 하나의 덧셈기를 이용하여 순차적으로 메시지 압축 연산을 수행한다.
SHA-256, 해쉬 연산, 암호, 메시지 스케줄, 메시지 압축, 덧셈기

Description

SHA 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치{Method and cryptographic apparatus for message scheduling and message digesting based SHA algorithm}
본 발명은 SHA 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치에 관한 것으로 특히, SHA-256 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치에 관한 것이다.
본 발명은 지식경제부 및 정보통신연구진흥원의 IT성장동력사업의 일환으로 수행한 연구로부터 도출된 것이다[과제관리번호: 2006-S-041-03, 과제명: 차세대 모바일 단말기의 보안 및 신뢰 서비스를 위한 공통 보안 핵심 모듈 개발].
최근 들어 급속한 무선 네트워크 기술의 발전과 더불어 디지털 정보사회가 고도화되고 전자상거래가 활성화됨에 따라, 암호기술은 고속 인터넷 망을 기반으로 한 사회, 경제적 활동의 안전성과 신뢰성, 사용자 프라이버시 보호등을 위한 핵심 기술로서 인식되고 있다. 특히 모바일 폰과 같은 이동용 플랫폼은 적절한 보안 조치가 없다면, 해커나 다른 악의적인 프로그램의 공격대상이 될 수 있다.
신뢰 컴퓨팅 그룹(Trusted Computing Group, TCG)의 모바일 폰 워킹 그 룹(Mobile Phone Working Group, MPWG)은 특별히 TCG의 보안 규격들을 모바일 폰 장치에 적합하도록 확장하는 작업을 수행하고 있다. 이러한, 보안 규격에서 모바일 폰을 위한 필수 보안 모듈인 모바일 신뢰 모듈(Mobile Trusted Module, MTM)은 해당 플랫폼의 무결성을 측정하고 이를 검증하는 작업을 수행하기 위하여, 키를 사용하지 않는 SHA-1(secure hash algorithm-1) 해쉬 함수를 사용하도록 지정하고 있다. 그러나 최근에는 안정적인 해쉬 함수의 사용을 위해 SHA-256의 사용을 권고 및 명시하고 있다. 이러한 암호 패러다임의 변화를 반영하여 TCG에서는 현재 진행하고 있는 TPM의 차기 버전의 표준인 TPM NEXT에는 SHA-256의 사용을 명시하고 있다.
대부분의 모바일 디바이스의 경우 메모리와 가용할 수 있는 전원 및 컴퓨팅 능력에 한계가 있으므로, TCG의 이러한 보안 규격들을 모바일 폰에 적용하기에는 여러 가지 기술적 어려움이 따른다. 특히 모바일 폰의 경우, 배터리의 용량에 한계가 있으므로 이러한 제약 요인들 중에 소비 전력에 큰 영향을 받게 된다. 따라서 저면적이면서 저전력의 SHA-256 암호회로의 설계 기술이 필요하다.
본 발명이 이루고자 하는 기술적 과제는 저면적이고 저전력의 하드웨어 구조를 갖는 SHA 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치를 제공하는 것이다.
상기한 목적을 달성하기 위한 본 발명의 특징에 따른 SHA 알고리즘 기반의 암호장치는,
하나의 덧셈기를 포함하며, 제1 라운드 이전에는 입력되는 연산 데이터 중 일부 데이터를 각 라운드 별 중간 데이터로 출력하고, 상기 제1 라운드부터는 상기 덧셈기를 이용하여, 제1 중간 데이터에 대하여 SHA 알고리즘의 제1 연산함수를 수행한 결과값, 제2 중간 데이터에 대하여 상기 SHA 알고리즘의 제2 연산함수를 수행한 결과값, 제3 중간 데이터 및 제4 중간 데이터를 복수의 단계에 걸쳐 기 설정된 순서대로 합산하여 각 라운드 별 중간 데이터로 출력하는 메시지 스케줄부; 및 상기 메시지 스케줄부에서 각 라운드 별로 출력되는 중간 데이터를 이용한 메시지 압축 연산을 수행하여 해쉬 연산의 최종 결과 데이터를 생성하는 메시지 압축부를 포함한다.
또한, 본 발명의 다른 특징에 따른 SHA 알고리즘 기반의 암호장치는,
입력되는 연산 데이터를 이용하여 각 라운드 별 중간 데이터를 생성하여 출력하는 메시지 스케줄부; 및 하나의 덧셈기 및 복수의 레지스터를 포함하며, 해쉬 연산이 시작되면 상기 복수의 레지스터에 복수의 초기값을 로드하고, 초기값 로드가 완료되면 메시지 압축 연산의 각 라운드 별로, 상기 복수의 레지스터에 저장된 값, 상기 복수의 레지스터에 저장된 값을 이용하여 해쉬 연산의 연산함수들을 각각 수행한 결과값들, 상기 중간 데이터 및 라운드 상수를 복수의 단계에 걸쳐 기 설정된 순서대로 상기 덧셈기를 통해 합산하고, 상기 덧셈기를 통해 합산한 값을 이용하여 상기 복수의 레지스터에 저장된 값을 업데이트하며, 상기 복수의 라운드에 걸쳐 수행되는 메시지 압축 연산이 완료되면 상기 복수의 초기값과 상기 복수의 레지 스터에 저장된 값을 합산하여 최종 결과 데이터를 생성하는 압축부를 포함한다.
또한, 본 발명의 또 다른 특징에 따른 SHA 알고리즘 기반의 암호장치의 메시지 스케줄 연산 방법은,
연산 데이터가 입력되면, 상기 연산 데이터를 복수의 블록으로 분류하여 상기 연산 데이터와 동일한 크기의 메모리에 저장하는 단계; 제1 라운드 이전에는 상기 메모리에 저장된 복수의 블록을 상기 제1 라운드 이전의 각 라운드 별 중간 데이터로 순차적으로 출력하는 단계; 및 상기 제1 라운드부터는 각 라운드 별로 이전 제1 라운드에서 출력된 제1 중간 데이터에 대하여 SHA 알고리즘의 제1 연산함수를 수행한 결과값, 이전 제2 라운드에서 출력된 제2 중간 데이터에 대하여 상기 SHA 알고리즘의 제2 연산함수를 수행한 결과값, 이전 제3 라운드 및 제 4라운드에서 출력된 제3 중간 데이터 및 제4 중간 데이터를 하나의 덧셈기를 이용하여 복수의 단계에 걸쳐 기 설정된 순서대로 합산하여 상기 제1 라운드부터의 각 라운드 별 중간 데이터를 출력하는 단계를 포함한다.
또한, 본 발명의 또 다른 특징에 따른 SHA 알고리즘 기반의 암호장치의 메시지 스케줄 연산을 통해 생성된 각 라운드 별 중간데이터를 이용하여 제1 연산함수, 제2 연산함수, 제3 연산함수 및 제4 연산함수를 포함하는 메시지 압축 연산을 수행하는 방법은,
복수의 초기값을 제1 레지스터, 제2 레지스터 및 제3 레지스터를 포함하는 복수의 레지스터에 로드하는 단계; 상기 제1 레지스터에 저장된 값, 상기 복수의 레지스터 중 일부 레지스터를 이용하여 상기 제1 연산함수, 제2 연산함수, 제3 연산 함수 및 제4 연산함수를 각각 수행한 결과값들, 대응하는 라운드의 중간 데이터 및 라운드 상수를 하나의 덧셈기를 이용하여 복수의 단계에 걸쳐 기 설정된 순서대로 합산하고, 각 단계 별로 상기 덧셈기를 이용하여 합산한 결과값을 상기 제1 레지스터, 상기 제2 레지스터 및 상기 제3 레지스터 중 하나에 선택적으로 저장하는 단계; 상기 복수의 레지스터 중 상기 제3 레지스터를 제외한 나머지 레지스터에 저장된 값들을 이웃하는 레지스터로 한 단계씩 시프트 하여 저장하는 단계; 상기 선택적으로 저장하는 단계 및 상기 시프트 하여 저장하는 단계를 복수의 라운드에 걸쳐 반복적으로 수행하는 단계; 및 상기 복수의 레지스터에 저장된 값과 상기 복수의 초기값을 합산하여 해쉬 연산의 최종 결과 데이터를 출력하는 단계를 포함한다.
본 발명에 따르면, 저면적이고 저전력 구조를 가지는 SHA 알고리즘 기반의 암호 장치를 제공한다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 명세서에 기재된 "…부", "…기" 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어나 소프트웨어 또는 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다.
이제 아래에서는 본 발명의 실시 예에 따른 SHA(Secure Hash Algorithm) 알고리즘 기반의 암호화 방법 및 암호장치에 대하여 도면을 참고로 하여 상세하게 설명한다. 특히, 본 발명의 실시 예에서는 SHA-256 기반의 암호화 방법 및 암호장치를 예로 들어 설명한다.
본 발명의 실시 예에 대하여 설명하기 이전에 우선, 해쉬 알고리즘인 SHA-256 알고리즘에 대하여 상세하게 설명한다.
우선, SHA-256 알고리즘은 최대 264비트 길이의 메시지를 입력 받아서 256 비트의 압축 메시지(message digest)를 출력하는 해쉬 연산을 나타낸다. SHA-256 알고리즘에서는 한 번의 해쉬 연산을 수행하기 위해 512 비트를 기본 단위로 하여 연산을 수행하며, 한 개의 512 비트의 연산 데이터에 대한 해쉬 연산을 위해 내부적으로 64라운드에 걸쳐 연산을 수행한다. SHA-256 알고리즘은 압축 메시지를 계산하기 위하여 다음의 수학식 1과 같이 32비트를 기반으로 하는 6가지 연산함수를 사용한다.
Figure 112008075230100-PAT00001
여기서,
Figure 112008075230100-PAT00002
Figure 112008075230100-PAT00003
는 각각 비트단위로 수행되는 AND와 XOR 연산이며, S와 R은 각각 우측 로테이트(rotate right) 우측 시프트(shift right) 연산을 나타낸다.
SHA-256 알고리즘은 크게 메시지 스케줄 연산과 메시지 압축 연산으로 구현된다. 메시지 스케줄 연산은 다음의 수학식 2와 같이 전술한 수학식 1의
Figure 112008075230100-PAT00004
함수와
Figure 112008075230100-PAT00005
함수를 이용하여 입력되는 512 비트의 연산 데이터로부터 64라운드에 걸쳐 수행되는 메시지 압축 연산에 필요한 32비트의 중간 데이터들을 생성한다.
Figure 112008075230100-PAT00006
여기서, Mt는 메시지 압축 연산의 입력으로 사용되는 t번째 라운드의 32 비트 중간 데이터를 의미한다. 수학식 2를 보면, 메시지 스케줄 연산 시, 초기 16번째 라운드까지는 입력되는 512비트의 연산 데이터를 16개의 블록으로 분류한 32비트의 데이터들을 차례대로 중간 데이터로 출력하고, 나머지 라운드에서는 수학식 1 의 연산함수(
Figure 112008075230100-PAT00007
)를 사용하여 매 라운드마다 새로운 32비트 중간 데이터를 계산하여 출력한다.
암호장치에서 이러한 메시지 스케줄 연산을 수행하기 위해서는 일반적으로 입력되는 512 비트의 연산 데이터를 저장하기 위한 512비트의 메모리와 16개의 시프트 레지스터가 필요하다. 이러한 구조의 암호화 장치는 초기 16번째 라운드까지의 메시지 스케줄 연산 시에는 512비트의 연산 데이터가 저장된 512 메모리로부터 32비트의 데이터를 바로 읽어와 중간 데이터로 출력하고, 나머지 라운드에서는 매 라운드마다 새로운 32비트의 중간 데이터를 계산하여 사용한다. 따라서 입력되는 512 비트의 연산 데이터를 저장하기 위해 사용되는 512 비트의 메모리는 초기 16번째 라운드까지의 메시지 스케줄 연산을 위해 사용되고, 나머지 라운드의 메시지 스케줄 연산에서는 더 이상 사용하지 않는 상태로 방치된다. 이러한 암호장치는 회로면적과 소비전력의 측면에서 너무 많은 자원(resource)을 낭비하는 구조이므로, 저전력, 저면적 특성을 필요로 하는 모바일 폰이나 다른 저전력 임베디드 시스템에 적용하기에는 어려움이 있다.
한편, 메시지 압축 연산은 다음의 수학식 3과 같이 수학식 1의
Figure 112008075230100-PAT00008
,
Figure 112008075230100-PAT00009
, Ch(), Maj() 함수를 이용하여 메시지 스케줄 연산을 통해 생성된 32비트의 중간 데이터들에 대한 메시지 압축 연산을 64 라운드에 걸쳐 반복 수행한다.
Figure 112008075230100-PAT00010
여기서, Wt는 메시지 스케줄 연산을 통해 매 라운드마다 출력되는 32 비트의 중간 데이터를 나타내고, Kt는 SHA-256 알고리즘에서 정의하는 라운드 상수로서 32 비트로 표현된다. 또한, a, b, c, d, e, f, g, h는 메시지 압축 연산에 사용되는 변수를 나타내며, 이들 변수들은 각 라운드마다 한 단계씩 시프트(shift) 이동되거나 또는 미리 정해져 있는 연산에 따라 각각 다른 값들을 저장한다.
수학식 3을 보면, 메시지 압축 연산을 위해서는 7번의 32비트 덧셈 연산이 필요하다. 따라서, 암호화 장치에서 메시지 압축 연산을 위해 가장 많은 회로 면적을 차지하는 것은 덧셈기가 된다. 이와 같이, 다수의 덧셈 연산을 위해 여러 개의 덧셈기를 사용하는 경우, 고속의 메시지 압축 연산은 가능할 수 있으나, 암호장치의 회로 면적과 소비 전력이 증가하게 되어 모바일 폰이나 다른 저전력 임베디드 시스템에 사용할 수 없다.
도 1은 본 발명의 실시 예에 따른 SHA-256 기반의 암호장치(100)를 도시한 구조도이다.
도 1을 보면, SHA-256 기반의 암호장치(100)는 인터페이스부(101), 제어부(102), 메시지 스케줄부(103) 및 메시지 압축부(104)를 포함한다.
인터페이스부(101)는 암호장치(100)가 사용되는 시스템의 시스템 버스(System bus)에 연결되며, 시스템 버스로부터 암호장치(100)로 입력되는 연산 데이터 및 제어명령을 수신한다. 또한 SHA-256 연산의 결과 데이터와 연산의 종료를 알리는 인터럽터(interrupter) 신호 또는 폴링(polling) 신호를 시스템 버스를 통해 시스템으로 전송하는 기능을 수행한다.
한편, 인터페이스부(101)는 시스템 버스를 통해 시스템이 전송한 제어명령을 수신하면, 이를 제어레지스터에 저장한다. 이와 같이 제어레지스터에 저장된 제어명령은 제어부(102)에서 참조하여 암호장치(100)의 구동에 필요한 제어신호를 발생하는데 사용된다. 여기서, 제어레지스터의 각 비트들은 암호장치(100)의 동작을 제어하기 위해 미리 정의된 값들을 사용한다.
또한, 인터페이스부(102)는 시스템 버스를 통해 시스템이 전송한 연산 데이터가 입력되면, 제어부(102)의 제어신호에 기초해 입력된 연산 데이터를 메시지 스케줄부(103) 내의 제1 메모리에 저장한다. 여기서, 제어부(102)는 연산 데이터를 메시지 스케줄부(103) 내의 제1 메모리에 저장하기 위한 저장경로를 설정하는 제어신호를 인터페이스부(102)로 인가한다.
제어부(102)는 암호장치(100)의 전반적인 데이터 흐름을 제어한다.
우선, 제어부(102)는 SHA-256 연산의 수행을 위해 메시지 스케줄부(103)와 메시지 압축부(104)의 내부 모듈들의 구동에 필요한 연산 수행 순서와 연산 결과 저장 과정을 64라운드에 걸쳐 제어한다.
또한, 제어부(102)는 인터페이스부(101)를 통한 데이터의 입력과 출력을 제 어하며, 인터페이스부(101)로 입력되는 데이터의 주소에 기초해 해당 데이터가 제어명령인지 연산 데이터인지 판별한다. 그리고, 입력되는 데이터가 제어명령인 경우, 이를 제어레지스터에 저장하도록 인터페이스부(101)를 제어하고, 제어레지스터에 저장된 제어명령을 분석하여 암호장치(100)에서 수행해야 하는 연산의 종류를 판별한다. 그리고, 수행해야 하는 연산을 수행하도록 암호장치(100) 상태 천이를 제어한다.
반면에, 입력되는 데이터가 연산 데이터인 경우, 제어부(102)는 이를 메시지 스케줄부(103) 내의 제1 메모리에 저장하도록 인터페이스부(101)를 제어한다. 여기서, 제어부(102)는 제어신호를 통해 입력되는 연산 데이터가 저장되는 제1 메모리 내 주소 및 연산 데이터의 저장 순서 등을 제어한다.
메시지 스케줄부(103)는 제1 메모리를 포함하며, 인터페이스부(101)를 통해 입력되는 연산 데이터를 제1 메모리에 저장하고, 입력되는 연산 데이터를 이용해 전체 64라운드에 걸쳐 메시지 압축 연산을 수행하기 위해 필요한 32비트의 중간 데이터를 생성하여 메시지 압축부(104)로 전달한다.
메시지 압축부(104)는 메시지 압축 연산 즉, SHA-256 해쉬 연산을 수행하며, 메시지 스케줄부(103)로부터 입력되는 32비트의 중간 데이터에 대한 64라운드의 연산을 수행하고, 최종 결과 데이터를 내부레지스터에 저장한다.
도 2는 본 발명의 실시 예에 따른 메시지 스케줄부(103)를 도시한 상세도이다.
도 2를 보면, 메시지 스케줄부(103)는 제1 메모리(201), 제1 연산함수 연산 부 (202), 제2 연산함수 연산부(203), 제1 덧셈기(204) 및 레지스터(205)를 포함한다. 또한, 제1 멀티플렉서(Multiplexer)(206), 제2 멀티플렉서(207), 제3 멀티플렉서(208)를 더 포함할 수 있다.
제1 메모리(201)는 512비트의 크기를 가지며, 16번째 라운드까지는 메시지 스케줄부(103)로 입력되는 512비트의 연산 데이터를 16개의 블록으로 분류하여 저장하고, 17번째 라운드부터는 연산 데이터 대신 메시지 스케줄부(103)에서 출력되는 32비트의 중간 데이터로 차례대로 저장한다. 여기서, 16번째 라운드까지는 연산 데이터에 포함된 16개의 32비트 데이터가 중간 데이터로 차례대로 출력되므로, 연산 데이터가 바로 중간 데이터가 된다. 따라서, 16번째 라운드까지는 연산 데이터를 메시지 스케줄부(103)에서 출력되는 중간 데이터로 업데이트할 필요가 없다.
제1 연산함수 연산부(202)는 17번째 라운드부터 전술한 수학식 2에 기초해 제1 메모리(201)에 저장된 중간 데이터들 중 (t-15)번째 라운드에서 출력된 중간 데이터에 대하여 제1 연산함수(
Figure 112008075230100-PAT00011
)를 수행하여 출력한다. 여기서, t는 현재 라운드가 몇 번째 라운드인지를 나타낸다.
제2 연산함수 연산부(203)는 17번째 라운드부터 전술한 수학식 3에 기초해 제1 메모리(201)에 저장된 중간 데이터들 중 (t-2)번째 라운드에서 출력된 중간 데이터에 대하여 제2 연산함수(
Figure 112008075230100-PAT00012
)를 수행하여 출력한다.
제1 덧셈기(204)는 17번째 라운드부터 각 라운드 별로 복수의 단계에 걸쳐 (t-16)번째 라운드에서 출력된 중간 데이터, 제1 연산함수 연산부(202)에서 출력되 는 출력값, (t-7)번째 라운드에서 출력된 중간 데이터 및 제2 연산함수 연산부(203)에서 출력되는 출력값을 기 설정된 순서대로 차례로 합산하여 출력한다. 이를 위해서, 제1 덧셈기(204)에서 복수의 단계 별로 합산되는 합산값은 레지스터(205)에 저장되며, 레지스터(205)에 저장된 합산값은 다음 단계에서 다시 제1 덧셈기(204)로 입력되어 합산에 사용된다.
예를 들어, 첫 번째 단계에서는 제1 덧셈기(204)를 통해 (t-16)번째 라운드에서 출력된 중간 데이터가 입력되고, 제1 덧셈기(204)는 (t-16)번째 라운드에서 출력된 중간 데이터를 출력한다. 제1 덧셈기(204)에서 출력된 (t-16)번째 라운드의 중간 데이터는 레지스터(205)에 저장되었다가 다음 단계에서 제1 덧셈기(204)로 출력된다. 따라서, 두 번째 단계에서는 제1 연산함수 연산부(202)에서 출력되는 출력값과 (t-16)번째 라운드의 중간 데이터가 합산되어 출력된다. 그리고, 이 합산값은 레지스터(205)에 저장되었다가 다시 다음 단계에서 제1 덧셈기(204)로 출력된다. 이러한 방법으로, 제1 덧셈기(204)는 세 번째 단계에서는 (t-16)번째 라운드의 중간 데이터 및 제1 로직합수 연산부(202)의 출력값을 합산한 결과에 (t-7)번째 라운드의 중간 데이터를 합산하여 출력하고, 네 번째 단계에서는 (t-16)번째 라운드의 중간 데이터, 제1 로직합수 연산부(202)의 출력값 및 (t-7)번째 라운드의 중간 데이터를 합산한 결과에 제2 연산함수(203)의 출력값을 합산하여 최종적으로 해당 라운드의 중간 데이터를 출력하게 된다.
레지스터(205) 제1 메모리(201)에서 출력되는 중간 데이터와 각 라운드 마다 제1 덧셈기(204)에서 출력되는 단계 별 합산값을 저장한다. 즉, 16번째 라운드까지 는 각 라운드 별로 제1 메모리(201)에서 출력되는 중간 데이터를 저장하며, 17번째 라운드 이후에는 각 단계 별로 메시지 스케줄 연산을 위해 제1 메모리(201)에서 출력되는 이전 라운드의 중간 데이터와 제1 덧셈기(204)에서 각 단계 별로 출력되는 합산값 중 하나를 저장한다. 여기서, 각 라운드의 마지막 단계에서 레지스터(205)에 저장되는 값은 해당 라운드의 중간 데이터가 된다.
제1 멀티플렉서(206)는 메시지 스케줄부(103)로 입력되는 512비트의 연산 데이터와 레지스터(205)에서 출력되는 각 라운드 별 중간 데이터 중 하나를 선택하여 제1 메모리(201)로 출력한다. 즉, 16번째 라운드까지는 입력되는 512비트의 연산 데이터를 제1 메모리(201)로 출력하고, 17번째 라운드부터는 각 라운드 별로 최종적으로 생성된 중간 데이터를 레지스터(205)로부터 읽어와 제1 메모리(201)로 출력한다.
제2 멀티플렉서(206)는 17번째 라운드 이후부터 각 단계 별로 입력되는 값들 중에서 (t-16)번째 라운드의 중간 데이터, 제1 연산함수 연산부(202)의 출력값, (t-7)번째 라운드의 중간 데이터 및 제2 연산함수 연산부(203)의 출력값 중 하나를 선택하여 출력한다.
제3 멀티플렉서(206)는 제1 메모리(201)에서 출력되는 중간 데이터와 제1 덧셈기(204)의 출력값 중 하나를 선택하여 레지스터(205)로 출력한다. 즉, 16번째 라운드까지는 제1 메모리(201)에서 차례대로 출력되는 32 비트의 데이터를 레지스터(205)로 출력하고, 17번째 라운드부터는 각 단계 별로 출력되는 제1 덧셈기(204)의 출력값을 레지스터(205)로 출력한다.
다음의 표 1은 전술한 메시지 스케줄부(103)의 각 구성요소의 동작에 기초해 각 라운드 별 수행 결과를 도시한 것이다. 표 1에서 x 표시는 어떤 값이든 전체 연산에 상관없는 값(Don't care)임을 의미한다.
표 1. 메시지 스케줄부의 라운드 단계별 동작
Figure 112008075230100-PAT00013
한편, 전술한 메시지 스케줄 연산을 수행하기 위해 메시지 스케줄부(103)의 제1 메모리(201)는 제어부(102)의 제어신호에 기초해 제1 메모리(201)에 데이터를 저장하거나 제1 메모리(201)에 저장된 데이터를 출력한다. 또한, 제1 멀티플렉서(206), 제2 멀티플렉서(207) 및 제3 멀티플렉스(204)는 제어부(102)의 제어신호에 기초해 입력되는 데이터 중 하나를 선택하여 출력한다.
도 3은 본 발명의 실시 예에 따른 메시지 압축부(104)를 도시한 구조도이다.
도 3을 보면, 메시지 압축부(104)는 제2 메모리(301), 8개의 레지스터(a, b, c, d, e, f, g, h)(302 ~ 309), 제3 연산함수 연산부(310), 제4 연산함수 연산 부(311), 제5 연산함수 연산부(312), 제6 연산함수 연산부(313), 제2 덧셈기(314), 제4 멀티플렉서(315), 제5 멀티플렉서(316) 및 제6 멀티플렉서(317)를 포함한다.
제2 메모리(104)는 메시지 압축 연산에 사용되는 초기값들(H0 ~ H7) 및 라운드 상수(Kt)를 저장한다. 여기서, 라운드 상수(Kj)는 룩업 테이블(Look Up Table) 형태로 저장된다.
복수의 레지스터(302 ~ 309)는 시프트 레지스터로 구성되며, 메시지 압축 연산에서 사용되는 변수들이 저장된다. 우선, SHA-256 해쉬 연산이 시작되면 복수의 레지스터(302 ~ 309)에는 초기값(H0 ~ H7)들이 저장된다. 그리고, 각 라운드 별로 메시지 압축 연산 중 발생하는 중간값들이 저장되며, 64라운드에 걸친 메시지 압축 연산이 완료되면, 메시지 압축 연산에 따른 최종 결과 데이터들이 저장된다.
제3 연산함수 연산부(310)는 e 레지스터(305), f 레지스터(306) 및 g 레지스터(307)에 저장된 값들에 대하여 제3 연산함수(Ch(,,))를 수행하여 출력한다.
제4 연산함수 연산부(311)는 e 레지스터(305)에 저장된 값에 대하여 제4 연산함수(
Figure 112008075230100-PAT00014
)를 수행하여 출력한다.
제5 연산함수 연산부(312)는 a 레지스터(302), b 레지스터(303) 및 c 레지스터(304)에 저장된 값들에 대하여 제5 연산함수(Maj(,,))를 수행하여 출력한다.
제6 연산함수 연산부(313)는 a 레지스터(302)에 저장된 값에 대하여 제6 연산함수(
Figure 112008075230100-PAT00015
)를 수행하여 출력한다.
제2 덧셈기(314)는 초기값 로드 시에는 매 클럭 사이클마다 제2 메모리(301)로부터 출력되는 초기값을 a 레지스터(302)로 출력하여 초기값들이 시프트 되어 대응하는 레지스터에 저장되도록 한다. 또한, 메시지 압축 연산의 매 라운드마다 복수의 단계에 걸쳐 h 레지스터(309)에 저장된 초기값(H7), 제3 연산함수 연산부(310)의 출력값(Ch(e,f,g)), 해당 라운드의 라운드 상수(Kj), 제4 연산함수 연산부(311)의 출력값(
Figure 112008075230100-PAT00016
), 해당 라운드의 메시지 스케줄 연산에 따른 중간 데이터(Wj), d 레지스터(305)에 저장된 초기값(H4), 제5 연산함수 연산부(312)의 출력값(Maj(a,b,j)) 및 제6 연산함수 연산부(313)의 출력값(
Figure 112008075230100-PAT00017
)을 차례대로 합산하여 출력한다. 이때, 각 단계마다 제2 덧셈기(314)에서 출력된 값은 h 레지스터(309), d 레지스터(305) 및 a 레지스터(304) 중 하나에 선택적으로 저장된다. 또한, 64 라운드에 걸친 메시지 압축 연산이 수행되면, 제2 메모리(301)로부터 출력되는 초기값과 이에 대응하는 레지스터에 저장된 값을 합산하여 a 레지스터(302)로 출력하여 각 레지스터에 저장된 초기값들을 업데이트한다.
제4 멀티플렉서(315)는 c 레지스터(304)에서 출력되는 값과 제2 덧셈기(314)의 출력 중 하나를 선택하여 d 레지스터(305)로 출력한다. 초기값을 각 레지스터로 로드(load)하거나 64라운드에 걸쳐 메시지 압축 연산을 수행하여 획득한 최종 결과 데이터를 각 레지스터에 저장하는 과정에서는 c 레지스터(304)에서 출력되는 데이터를 선택한다. 반면에, 매 라운드마다 복수의 단계를 거쳐 메시지 압축 연산을 수 행하는 동안에는 제2 덧셈기(314)에서 출력되는 값을 선택하여 출력한다.
제5 멀티플렉서(316)는 g 레지스터(308)에서 출력되는 값과 제2 덧셈기(314)의 출력 중 하나를 선택하여 h 레지스터(305)로 출력한다. 초기값을 각 레지스터로 로드하거나 64라운드에 걸쳐 메시지 압축 연산을 수행하여 획득한 최종 결과 데이터를 각 레지스터에 저장하는 과정에서는 g 레지스터(304)에서 출력되는 데이터를 선택하여 출력한다. 반면에, 매 라운드마다 복수의 단계를 거쳐 메시지 압축 연산을 수행하는 동안에는 제2 덧셈기(314)에서 출력되는 값을 선택하여 출력한다.
제6 레지스터(317)는 전술한 수학식 3에 기초해 메시지 압축 연산의 각 단계 별로 제3 연산함수 연산부(310), 제4 연산함수 연산부(311), 제5 연산함수 연산부(312), 제6 연산함수 연산부(313)에서 출력되는 출력값, 제2 메모리(301)에서 출력되는 초기값 및 라운드 상수 중 하나를 선택하여 제2 덧셈기(314)로 출력한다.
다음의 표 2는 전술한 메시지 압축부(104)의 각 구성요소의 동작에 기초해 각 라운드 별 수행 결과를 도시한 것이다.
표 2. 메시지 압축부의 라운드 단계별 동작
Figure 112008075230100-PAT00018
표 2를 보면, 제2 덧셈기(314)에서 각 단계 별로 순차적으로 합산된 값은 각 단계 별로 h 레지스터(309), d 레지스터(305), a 레지스터(302) 중 하나에 저장된다.
한편, 전술한 바와 같이 동작하기 위해 제어부(102)는 전술한 수학식 3의 메시지 압축 연산을 기준으로 메시지 압축부(104)를 제어하기 위한 제어신호를 출력한다. 이에 따라, 제2 메모리(302)는 제어부(102)의 제어신호에 기초해 제2 메모리(302)에 저장된 초기값 또는 라운드 상수를 출력하거나, 초기값을 업데이트한다. 또한, 제4 멀티플렉서(315), 제5 멀티플렉서(316) 및 제6 멀티플렉서(317)는 제어부(102)의 제어신호에 기초해 입력되는 값들 중 하나를 선택하여 출력한다.
도 4는 본 발명의 실시 예에 따른 메시지 스케줄부(103)의 메시지 스케줄 연 산 방법을 도시한 흐름도이다.
도 4를 보면, 우선 메시지 스케줄부(103)로 512비트의 연산 데이터가 입력되면, 제1 멀티플렉서(206)는 512비트의 연산 데이터를 제1 메모리(201)로 출력하고, 제1 메모리(201)는 512비트가 16개의 블록으로 나누어진 32비트의 데이터들을 차례대로 저장하도록 제어한다.
이후, 메시지 스케줄부(103)는 초기 16번째 라운드까지(t ≤ 16)는 제1 메모리(201)에 저장된 32비트의 데이터들을 각 라운드 별 중간 데이터로 차례대로 출력한다(S101, S102). 이를 위해서, 제1 메모리(201)는 제어부(102)의 제어신호를 토대로 32비트의 데이터들을 차례대로 출력하고, 제2 멀티플렉서(207)는 제1 메모리(201)에서 출력되는 데이터를 레지스터(205)로 출력한다. 따라서, 레지스터(205)는 제2 멀티플렉서(207)에서 출력되는 데이터를 저장하고, 이후, 레지스터(205)에 저장된 중간 데이터는 메시지 압축부(104)의 입력 데이터로 사용된다. 이와 같이, 초기 16번째 라운드까지 중간 데이터를 출력하기 위해서는 단순히 제1 메모리(201)에서 데이터를 읽어오는 작업만 수행하면 되므로 각 라운드 별로 1클럭 사이클만이 소요된다. 한편, 메시지 연산부(103)의 구성요소들 중 제1 메모리(201), 레지스터(205) 및 제2 멀티플렉서(207)를 제외한 나머지 구성요소들은 초기 16번째 라운드까지는 입력 값에 상관없이 동작한다. 즉, 중간 데이터 결정에 어떠한 영향도 주지 않는다.
17번째 라운드부터 64번째 라운드까지 메시지 스케줄부(103)는 각 라운드 별로 복수의 단계에 걸쳐 메시지 스케줄 연산을 수행하여 중간 데이터를 출력하 고(S103), 생성된 중간 데이터를 제1 메모리(201)에 차례대로 저장하는 과정을 반복해서 수행한다(S104, S105).
여기서, 메시지 스케줄 연산은 총 4단계에 걸쳐서 수행되며, 제1 덧셈기(240)를 이용하여 각 단계별로 (t-16)번째 라운드에서 출력된 중간 데이터(Mt-16), (t-15)번째 라운드에서 출력된 중간 데이터에 대한 제1 연산함수(
Figure 112008075230100-PAT00019
) 연산을 수행한 결과값(
Figure 112008075230100-PAT00020
), (t-7)번째 라운드에서 출력된 중간 데이터(Mt-7) 그리고, (t-2)번째 라운드에서 출력된 중간 데이터(Mt-2)에 대한 제2 연산함수(
Figure 112008075230100-PAT00021
) 연산을 수행한 결과값(
Figure 112008075230100-PAT00022
)을 차례대로 합산하여 출력한다. 한편, 메시지 스케줄 연산의 각 단계 별로는 1클럭 사이클씩 소요되므로 각 라운드 별 메시지 스케줄 연산을 위해서 총 4클럭 사이클이 소요된다.
첫 번째 단계에서, 제1 메모리(201)는 (t-16)번째 라운드에서 출력된 중간 데이터(Mt-16)를 출력하고, 제3 멀티플렉서(208)는 이를 레지스터(205)로 출력한다. 따라서, 첫 번째 단계에서는 (t-16)번째 라운드에서 출력된 중간 데이터가 레지스터(205)에 저장되며, 레지스터(205)에 저장된 값은 다음 단계에서 제1 덧셈기(204)의 입력으로 입력된다. 예를 들어, 17번째 라운드의 경우, 첫 번째 단계에서는 첫 번째 라운드에서 출력된 중간 데이터(M1)가 결과값으로 레지스터(205)에 저장되며, 이 값은 두 번째 단계에서 제1 덧셈기(204)의 입력으로 출력된다.
두 번째 단계에서, 제1 메모리(201)는 (t-15)번째 라운드에서 출력된 중간 데이터를 출력한다. 또한, 제1 연산함수 연산부(202)는 (t-15)번째 라운드에서 출력된 중간 데이터에 대한 제1 연산함수(
Figure 112008075230100-PAT00023
)를 수행한 결과값(
Figure 112008075230100-PAT00024
)을 출력하고, 제2 멀티플렉서(207)은 이를 제1 덧셈기(204)로 출력한다. 이에 따라, 제1 덧셈기(204)는 이전 단계에서 출력된 결과값(Mt-16)과 제1 연산함수 연산부(202)에서 출력되는 출력값(
Figure 112008075230100-PAT00025
)을 합산하여 출력한다. 또한, 제1 덧셈기(204)에서 출력된 값(
Figure 112008075230100-PAT00026
)은 제3 멀티플렉서(208)를 통해 레지스터(205)에 저장되며, 레지스터(205)에 저장된 값은 다음 단계에서 제1 덧셈기(204)의 입력으로 입력된다. 예를 들어, 17번째 라운드의 경우, 두 번째 단계에서는 M1
Figure 112008075230100-PAT00027
를 합산한 값(
Figure 112008075230100-PAT00028
)이 레지스터(205)에 저장되며, 이 값은 세 번째 단계에서 제1 덧셈기(204)의 입력으로 출력된다.
세 번째 단계에서, 제1 메모리(201)는 (t-7)번째 라운드에서 출력된 중간 데이터(Mt-7)를 출력하고, 제2 멀티플렉서(208)는 이를 제1 덧셈기(204)로 출력한다. 이에 따라, 제1 덧셈기(204)는 이전 단계에서 출력된 결과값(
Figure 112008075230100-PAT00029
)과 (t-7)번째 라운드에서 출력된 중간 데이터(Mt-7)를 합산하여 출력한다. 또한, 제1 덧셈기(204)에서 출력된 값(
Figure 112008075230100-PAT00030
)은 제3 멀티플렉서(208)를 통해 레지스터(205)에 저장되며, 레지스터(205)에 저장된 값은 다음 단계에서 제1 덧 셈기(204)의 입력으로 입력된다. 예를 들어, 17번째 라운드에서는, 세 번째 단계에서는 (
Figure 112008075230100-PAT00031
)와 M10를 합산한 값(
Figure 112008075230100-PAT00032
)이 레지스터(205)에 저장되며, 이 값은 세 번째 단계에서 제1 덧셈기(204)의 입력으로 출력된다.
네 번째 단계에서, 제1 메모리(201)는 (t-2)번째 라운드에서 출력된 중간 데이터(Mt-2)를 출력하며, 제2 연산함수 연산부(203)는 이 값에 대한 제2 연산함수(
Figure 112008075230100-PAT00033
) 연산을 수행하여 출력한다. 제2 연산함수 연산부(203)에서 출력된 값(
Figure 112008075230100-PAT00034
)은 제2 멀티플렉서(207)에 의해 제1 덧셈기(204)로 출력되고, 제1 덧셈기(204)는 제2 연산함수 연산부(203)에서 출력된 값(
Figure 112008075230100-PAT00035
)과 이전 단계에서 출력된 값(
Figure 112008075230100-PAT00036
)을 합산하여 출력한다. 또한, 제1 덧셈기(204)에서 출력된 값(
Figure 112008075230100-PAT00037
)은 제3 멀티플렉서(208)를 통해 레지스터(205)에 저장되며, 레지스터(205)에 저장된 값은 해당 라운드의 중간 데이터로 사용된다. 즉, 네 번째 단계에서 레지스터(204)에 저장된 값(
Figure 112008075230100-PAT00038
)은 해당 라운드의 중간 데이터로 메시지 압축부(104)에서 사용되며, 다음 라운드에서의 메시지 스케줄 연산을 위해 제1 메모리(201)에 저장된다. 예를 들어, 17번째 라운드의 경우, 네 번째 단계에서는 (
Figure 112008075230100-PAT00039
)와
Figure 112008075230100-PAT00040
를 합산한 값(
Figure 112008075230100-PAT00041
)이 레지스터(205)에 저장되며, 이 값은 17번째 라운드의 최종 중간 데이터가 된다.
한편, 각 라운드 별로 생성된 중간 데이터 중 17번째 라운드부터 생성된 중간 데이터는 제1 메모리(201)에 차례대로 저장된다. 여기서, 16번째 라운드까지 출력된 중간 데이터는 메시지 스케줄부(103)로 입력된 512비트의 연산 데이터를 32비트의 데이터로 분류한 16개의 블록들과 차례대로 일치하므로 별도의 저장 과정은 생략한다. 한편, 17번째 라운드부터 생성된 중간 데이터는 512비트 데이터를 분류한 16개의 블록 중 (i mod 16)번째 블록이 저장된 제1 메모리(201)의 주소에 덮어쓰기 된다.
한편, 전술한 메시지 스케줄부(103)에서 제1 메모리(201)의 데이터를 읽고 쓰기 위한 제어신호와 각 멀티플렉서(206, 207, 208)에서 입력되는 데이터 중 하나를 선택하도록 하는 제어신호는 제어부(102)에서 출력된다. 여기서, 제1 메모리(201)를 제어하기 위한 제어 신호는 읽기(read)/쓰기(write) 선택신호와 대응하는 제1 메모리의 주소를 포함한다.
전술한 바와 같이, 본 발명의 실시 예에서는 메시지 스케줄부(103)를 구현하기 위해 512비트 제1 메모리, 제1 덧셈기, 레지스터를 각각 하나씩 사용한다. 따라서, 메시지 스케줄 연산에 사용되는 메모리의 활용도를 높이고, 하드웨어 면적 및 소비 전력을 최소화하는 효과가 있다.
도 5는 본 발명의 실시 예에 따른 메시지 압축부(104)의 메시지 압축 연산 방법을 도시한 흐름도이다.
도 5를 보면, SHA-256 해쉬 연산이 시작되면, 우선, 메시지 압축부(104)는 제2 메모리(301)에 저장된 기 초기값들(H0 ~ H7)를 복수의 레지스터(a ~ h)(302 내지 309)에 차례대로 로드(load)한다(S201). 여기서, 초기값들을 복수의 레지스터(302 내지 309)에 차례대로 로드하기 위해서는 총 8 클럭 사이클이 소요되며, 각 레지스터는 시프트 레지스터로 구동하여 매 클럭 사이클마다 레지스터에 저장된 값을 이웃하는 레지스터로 시프트 시키는 시프트 연산을 수행한다.
이를 좀더 자세히 보면, 우선 제2 메모리(301)는 제어부(102)의 제어신호에 기초해 매 클럭 사이클마다 제2 메모리(301)에 저장된 초기값들을 차례대로 출력한다. 즉, 제2 메모리(301)는 첫 번째 클럭 사이클에서는 초기값들 중 H7을 출력하고, 이후 매 클럭 사이클마다 H6, H5,…, H0 순으로 초기값을 차례대로 출력한다. 이렇게 출력된 초기값들은 제6 멀티플렉서(317) 및 제2 덧셈기(314)를 거쳐 a 레지스터(302)로 출력된다. 그리고, 이전에 a ~ g레지스터에 저장된 값들은 b ~ h 레지스터로 각각 한 단계씩 시프트 되어 저장된다.
따라서, 첫 번째 클럭 사이클에서는 a 레지스터(302)에 H7이 저장되고, 나머지 레지스터에는 0이 저장되며, 두 번째 클럭 a 레지스터(302)에 H6가 저장되고, b 레지스터(303)에는 H7이 저장된다. 그리고, 최종적으로 8 클럭 사이클이 지나면, 각 레지스터에는 a = H0, b=H1, c=H2, …, h=H7와 같이 초기값들이 로드된다.
전술한 바와 같이 각 레지스터에 초기값을 로드하는 과정이 끝나면, 메시지 압축부(104)는 64라운드에 걸쳐 메시지 스케줄부(103)로부터 입력되는 32 비트의 중간 데이터를 이용하여 수학식 3과 같이 메시지 압축 연산을 수행한다(S202). 여기서, 각 라운드 별 메시지 압축 연산은 총 7 단계에 걸쳐서 수행되며, 제2 덧셈기(314)를 이용하여 h 레지스터(309)에 저장된 초기값(a), 제3 연산함수 연산부(310)의 출력값(Ch(e,f,g)), 라운드 상수(Kj), 제 4 연산함수 연산부(311)의 출력값(
Figure 112008075230100-PAT00042
), 해당 라운드의 메시지 스케줄 연산에 따른 중간 데이터(Wj), d 레지스터(305)에 저장된 초기값(d), 제5 연산함수 연산부(312)의 출력값(Maj(a,b,c)) 및 제6 연산함수 연산부(313)의 출력값(
Figure 112008075230100-PAT00043
)을 차례대로 합산한다. 그리고, 합산 결과를 h 레지스터(309), d 레지스터(305) 및 a 레지스터(304) 중 하나에 선택적으로 저장한다. 한편, 메시지 압축 연산의 각 단계 별로는 1클럭 사이클씩 소요되므로 각 라운드 별 메시지 압축 연산을 위해서 총 7클럭 사이클이 소요된다.
첫 번째 단계에서, 제2 덧셈기(314)는 h 레지스터(309)에 저장된 초기값(h) 과 제 3 연산함수 연산부(310)의 출력값(Ch(e,f,g))을 합산하여 출력하고, 이 합산값(h + Ch(e,f,g))은 h 레지스터(309)에 저장된다. 이를 위해서, 제6 멀티플렉서(317)는 입력되는 값들 중에서 제3 연산함수 연산부(310)의 출력값(Ch(e,f,g))을 선택하여 제2 덧셈기(314)로 출력하고, 제5 멀티플렉서(316)는 입력되는 값들 중에서 제2 덧셈기(314)에서 출력되는 값을 h 레지스터(309)로 출력한다.
두 번째 단계에서, 제2 덧셈기(314)는 이전 단계에서 h 레지스터(309)에 저장된 값(h + Ch(e,f,g))과 라운드 상수(Kj)를 합산하여 출력하고, 이 합산값(h + Ch(e,f,g) + Kj )은 h 레지스터(309)에 저장된다. 여기서, 라운드 상수(Kj) 각 라운드에 대응하는 상수로서, 제2 메모리(301)에 룩업 테이블 형태로 저장된다. 따라서, 제2 메모리(301)는 제어부(102)의 제어신호에 기초해 해당 라운드에 대응하는 라운드 상수(Kj)를 출력하고, 제6 멀티플렉서(317)는 입력되는 값 들 중 제2 메모리(301)에서 출력되는 값(Kj)을 선택하여 제2 덧셈기(314)로 출력한다. 따라서, 제2 덧셈기(314)는 h 레지스터(309)에 저장된 값(h + Ch(e,f,g))과 제6 멀티플렉서(317)에서 출력되는 값(Kj)을 합산하여 출력하고, 이 값(h + Ch(e,f,g) + Kj)은 제5 멀티플렉서(316)를 통해 h 레지스터(309)에 저장된다.
세 번째 단계에서, 제2 덧셈기(314)는 이전 단계에서 h 레지스터(309)에 저장된 값(h + Ch(e,f,g) + Kj)과 제4 연산함수 연산부(311)에서 출력되는 값(
Figure 112008075230100-PAT00044
)을 합산하여 출력하고, 이 합산값(
Figure 112008075230100-PAT00045
)은 h 레지스터(309)에 저장된다. 이를 위해, 제6 멀티플렉서(317)는 입력되는 값 들 중 제4 연산함수 연산부(311)에서 출력되는 값(
Figure 112008075230100-PAT00046
)을 선택하여 제2 덧셈기(314)로 출력하고, 제2 덧셈기(314)는 h 레지스터(309)에 저장된 값(h + Ch(e,f,g) + Kj)과 제6 멀티플렉서(317)에서 출력되는 값(
Figure 112008075230100-PAT00047
)을 합산하여 출력한다. 그리고, 제2 덧셈기(314)에서 합산된 값(
Figure 112008075230100-PAT00048
)은 제5 멀티플렉 서(316)를 통해 h 레지스터(309)에 저장된다.
네 번째 단계에서, 제2 덧셈기(314)는 이전 단계에서 h 레지스터(309)에 저장된 값(
Figure 112008075230100-PAT00049
)과 메시지 스케줄부(103)로부터 입력되는 중간 데이터(Wj)를 합산하여 출력하고, 이 합산값(
Figure 112008075230100-PAT00050
)은 h 레지스터(309)에 저장된다. 이를 위해, 제6 멀티플렉서(317)는 입력되는 값 들 중 메시지 스케줄부(103)로부터 입력되는 중간 데이터(Wj)를 선택하여 제2 덧셈기(314)로 출력하고, 제2 덧셈기(314)는 h 레지스터(309)에 저장된 값(
Figure 112008075230100-PAT00051
)과 제6 멀티플렉서(317)에서 출력되는 값(Wj)을 합산하여 출력한다. 그리고, 제2 덧셈기(314)에서 합산된 값(
Figure 112008075230100-PAT00052
)은 제5 멀티플렉서(316)를 통해 h 레지스터(309)에 저장된다.
여기서, 제2 덧셈기(314)가 메시지 압축 연산의 네 번째 단계 즉, 네 번째 클럭 사이클에 메시지 스케줄부(103)에서 출력되는 중간 데이터(Wj)를 합산한 것은, 메시지 스케줄부(103)에서 중간 데이터(Wj)를 계산하기 위해 총 4클럭 사이클을 소요하는 시간적 특성을 고려한 것이다. 메시지 압축부(104)에서 각 라운드 별 메시지 압축 연산을 수행하는데 총 7 클럭 사이클이 필요하므로, 메시지 스케줄부(103) 에서 중간 데이터(Wj)를 계산하기에 충분한 시간이 보장된다. 따라서, 본 발명의 실시 예에서는 메시지 스케줄부(103)에서 중간 데이터(Wj)를 계산하기 위해 별도의 클럭이 더 필요하지 않고, 메시지 스케줄 연산과 메시지 압축 연산을 동시에 수행하는 것이 가능하다.
한편, 본 발명의 실시 예에서는 메시지 압축 연산 시 각 라운드 별로 네 번째 단계에서 메시지 스케줄부(103)에서 출력되는 중간 데이터를 합산하나, 본 발명에서는 네 번째 단계 이후의 단계에서 메시지 스케줄부(103)에서 출력되는 중간 데이터를 합산하는 것 또한 가능하다.
다섯 번째 단계에서, 제2 덧셈기(314)는 이전 단계에서 h 레지스터(309)에 저장된 값(
Figure 112008075230100-PAT00053
)과 d 레지스터(305)에 저장된 초기값(d)를 합산하여 출력하고, 이 합산값(
Figure 112008075230100-PAT00054
)은 d 레지스터(305)에 저장된다. 이를 위해, 제6 멀티플렉서(317)는 입력되는 값 들 중 d 레지스터(305)로부터 입력되는 값(d)을 선택하여 제2 덧셈기(314)로 출력하고, 제2 덧셈기(314)는 h 레지스터(309)에 저장된 값(
Figure 112008075230100-PAT00055
)과 제6 멀티플렉서(317)에서 출력되는 값(d)을 합산하여 출력한다. 그리고, 제2 덧셈기(314)에서 합산된 값(
Figure 112008075230100-PAT00056
)은 제4 멀티플렉서(315)를 통해 d 레지 스터(305)에 저장된다.
한편, 다섯 번째 단계에서 h 레지스터(309)는 제2 덧셈기(314)에서 출력되는 값을 저장하지 않는다. 즉, 다섯 번째 단계가 수행된 이후, h 레지스터(309)에는 이전 단계에서 저장된 값(
Figure 112008075230100-PAT00057
)이 유지되고, d 레지스터(305)에는 제2 덧셈기(314)의 출력값(
Figure 112008075230100-PAT00058
)이 저장된다. 이는, 수학식 3의 e = d + T1을 수행하기 위한 것으로서, d 레지스터(305)에 저장된 값은 메시지 압축 연산의 마지막 단계에서 e 레지스터(306)로 시프트 된다.
여섯 번째 단계에서, 제2 덧셈기(314)는 이전 단계에서 h 레지스터(309)에 저장된 값(
Figure 112008075230100-PAT00059
)과 제5 연산함수 연산부(312)에서 출력되는 값(Maj(a,b,c))을 합산하여 출력하고, 이 합산값(
Figure 112008075230100-PAT00060
)은 h 레지스터(309)에 저장된다. 이를 위해, 제6 멀티플렉서(317)는 입력되는 값 들 중 제5 연산함수 연산부(312)에서 출력되는 값(Maj(a,b,c))을 선택하여 제2 덧셈기(314)로 출력하고, 제2 덧셈기(314)는 h 레지스터(309)에 저장된 값(
Figure 112008075230100-PAT00061
)과 제6 멀티플렉서(317)에서 출력되는 값(Maj(a,b,c))을 합산하여 출력한다. 그리고, 제2 덧셈기(314)에서 합산된 값(
Figure 112008075230100-PAT00062
)은 제5 멀티플렉서(316)를 통해 h 레지스터(309)에 저장된다.
일곱 번째 단계에서, 제2 덧셈기(314)는 이전 단계에서 h 레지스터(309)에 저장된 값(
Figure 112008075230100-PAT00063
)과 제6 연산함수 연산부(313)에서 출력되는 값(
Figure 112008075230100-PAT00064
)을 합산하여 출력하고, 이 합산값(
Figure 112008075230100-PAT00065
)은 a 레지스터(302)에 저장된다. 이를 위해, 제6 멀티플렉서(317)는 입력되는 값 들 중 제6 연산함수 연산부(313)에서 출력되는 값(
Figure 112008075230100-PAT00066
)을 선택하여 제2 덧셈기(314)로 출력하고, 제2 덧셈기(314)는 h 레지스터(309)에 저장된 값(
Figure 112008075230100-PAT00067
)과 제6 멀티플렉서(317)에서 출력되는 값(
Figure 112008075230100-PAT00068
)을 합산하여 출력한다. 그리고, 제2 덧셈기(314)에서 합산된 값(
Figure 112008075230100-PAT00069
)은 a 레지스터(302)에 저장된다. 여기서, 제2 덧셈기(314)에서 출력된 값(
Figure 112008075230100-PAT00070
)이 a 레지스터(302)에 저장됨과 동시에, 각 레지스터에 이전에 저장된 값들이 하나씩 시프트 되어 저 장된다. 즉, a 레지스터(302)에 저장된 값은 b 레지스터(303)로, b 레지스터(303)에 저장된 값은 c 레지스터(304)로 시프트 된다. 또한, 제4 멀티플렉서(315)를 통해 c 레지스터(304)에 저장된 값은 d 레지스터(305)로 시프트 되고, 다섯 번째 단계에서 d 레지스터(305)에 저장된 값(
Figure 112008075230100-PAT00071
)은 e 레지스터(306)로 시프트 된다. 또한, e 레지스터(306)에 저장된 값은 f 레지스터(307)로 시프트 되고, f 레지스터(307)에 저장된 값은 g 레지스터(308)로 시프트 되고, g 레지스터(308)에 저장된 값은 제5 멀티플렉서(316)를 통해 h 레지스터(309)로 시프트 된다.
전술한 7 단계의 메시지 압축 연산은 64 라운드에 걸쳐 반복되며, 64라운드의 메시지 압축 연산이 완료되면, 각 레지스터에는 메시지 압축 연산에 따른 중간값이 저장된다.
이와 같이, 64 라운드에 걸쳐 모든 메시지 압축 연산이 완료되면, SHA-256 연산의 최종 결과 데이터를 얻기 위해 메시지 압축부(104)는 다음의 수학식 4와 같이 초기값들을 업데이트하고, 업데이트된 초기 값들을 각 레지스터에 로드한다(S203).
Figure 112008075230100-PAT00072
이러한 초기값 업데이트 과정은 초기에 8클럭 사이클에 걸쳐 각 레지스터에 초기값을 로드하는 과정과 동일하게 수행된다. 다만, 초기값 로드 시에는 각 레지 스터들이 모두 '0'으로 초기화 된 상태였으나, 초기값 업데이트 시에는 각 레지스터에 64 라운드에 걸친 메시지 압축 연산의 결과인 중간값이 저장되어 있는 차이점이 있다.
초기값 업데이트 과정을 좀더 자세히 보면, 우선 제2 메모리(301)는 제어부(102)의 제어신호에 기초해 매 클럭 사이클마다 제2 메모리(301)에 저장된 초기값들을 차례대로 출력한다. 즉, 제2 메모리(301)는 첫 번째 클럭 사이클에서는 초기값들 중 H7을 출력하고, 이후 매 클럭 사이클마다 H6, H5,…, H0 순으로 초기값을 차례대로 출력한다. 또한, 제4 멀티플렉서(315)는 입력되는 값들 중에서 제2 메모리(301)에서 출력되는 값을 제2 덧셈기(314)로 출력하고, 제2 덧셈기(314)는 매 클럭 사이클마다 제2 메모리(301)에서 출력되는 값과 h 레지스터(309)에 저장된 값을 합산하여 a 레지스터(302)로 출력한다. 여기서, 제2 덧셈기(314)에서 출력된 값이 a 레지스터(302)에 저장됨과 동시에, 이전에 a ~ g 레지스터에 저장된 값들은 b ~ h 레지스터로 각각 한 단계씩 시프트 되어 저장된다.
예를 들어, 첫 번째 클럭 사이클에는 제2 메모리(301)에서 출력되는 초기값(H7)과 h 레지스터(309)에 저장된 중간값(h)이 합산되고, 이 합산된 값(h + H7)은 a 레지스터(302)에 저장된다. 또한, 이전에 a ~ g 레지스터에 저장된 중간 데이터는 b ~ h 레지스터로 각각 한 단계씩 시프트 되어 저장된다.
또한, 두 번째 클럭 사이클에는 제2 메모리(301)에서 출력되는 초기값(H6)과 이전 클럭 사이클에서 h 레지스터에 저장된 중간값(e)이 합산된다. 여기서, 첫 번 째 클럭 사이클에서 h 레지스터(309)로 e 레지스터(306)에 저장된 중간값이 시프트 되어 저장되었으므로, 두 번째 클럭 사이클에서 제2 덧셈기(314)는 e 레지스터(306)에 저장된 중간값과 초기값(H6)을 합산한 값(e + H6)을 a 레지스터(302)로 출력한다. 따라서, 제2 덧셈기(314)에서 출력된 값(e + H6)은 a 레지스터(302)에 저장되고, 동시에 첫 번째 클럭 사이클에서 a ~ g 레지스터에 저장된 값들은 b ~ h 레지스터로 각각 한 단계씩 시프트 되어 저장된다. 이에 따라, 두 번째 클럭 사이클 이후에는 a 레지스터(302)에는 (e + H6)가 저장되고, b 레지스터(303)에는 (h + H7)가 저장되고, 나머지 c ~ h 레지스터에는 이전 클럭 사이클에서 a ~ f 레지스터에 저장된 값들이 시프트 되어 저장된다.
전술한 방법으로 8클럭 사이클 동안의 초기값 업데이트 과정이 완료되면, 각 레지스터에 저장된 값들은 다음의 수학식 5와 같다.
a = a + H0, b = b + H1, c = c + H2, …, h = h + H7
이와 같이 초기값 업데이트가 완료되면, 각 레지스터에 저장된 값이 SHA-256 연산을 수행한 최종 결과 데이터가 되며, 제어부(102)는 각 레지스터에 저장된 값들로 제2 메모리(301)에 저장된 초기값들을 업데이트한다. 그리고, SHA-256 연산을 한번만 수행 시에는 제2 메모리(301)에 저장된 업데이트된 초기값들(H0, H1, …, H7)을 SHA-256 연산의 최종 결과 데이터로 시스템 버스를 통해 출력한다. 한편, SHA-256 연산을 여러 번에 걸쳐 반복 수행하는 경우, 업데이트된 초기값들은 다음 번의 메시지 압축 연산을 위한 초기값으로 사용된다.
따라서, 메시지 압축부(104)는 SHA-256 연산을 수행해야 하는 메시지의 길이가512비트보다 길어서, 전술한 메시지 스케줄 연산 및 메시지 압축 연산을 여러 번 수행해야 하는 경우, 두 번째 메시지 압축 연산부터는 이미 각 레지스터에 초기값(H0, H1, …, H7)이 로드된 상태이므로, 초기값 로드 과정을 생략하는 것이 가능하다.
한편, 전술한 메시지 압축 연산 시 제4 멀티플렉서(315), 제5 멀티플렉서(316) 및 제6 멀티플렉서(317)에서 입력되는 값들 중 하나를 선택하기 위한 제어신호와 각 레지스터에 데이터를 저장하기 위한 제어신호(write 신호)는 제어부(102)에서 출력되며, 제어부(102)는 전술한 표 2의 순서대로 메시지 압축 연산이 수행되도록 각 클럭 사이클 별로 각 멀티플렉서 및 레지스터를 제어한다.
전술한 바와 같이, 본 발명의 실시 예에서는 메시지 압축부(104)를 구현하기 위해 덧셈기를 하나만 사용한다. 따라서, 메시지 압축 연산을 수행하기 위한 메시지 압축부(104)의 회로 면적 및 소비 전력을 줄이는 것이 가능하여 모바일 폰과 같이 저전력 임베디드 시스템에 적용하는 것이 가능한 효과가 있다.
이상에서 설명한 본 발명의 실시예는 장치 및 방법을 통해서만 구현이 되는 것은 아니며, 본 발명의 실시예의 구성에 대응하는 기능을 실현하는 프로그램 또는 그 프로그램이 기록된 기록 매체를 통해 구현될 수도 있으며, 이러한 구현은 앞서 설명한 실시예의 기재로부터 본 발명이 속하는 기술분야의 전문가라면 쉽게 구현할 수 있는 것이다.
이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.
도 1은 본 발명의 실시 예에 따른 SHA-256 암호장치를 도시한 구조도이다.
도 2는 본 발명의 실시 예에 따른 메시지 스케줄부를 도시한 상세도이다.
도 3은 본 발명의 실시 예에 따른 메시지 압축부를 도시한 상세도이다.
도 4는 본 발명의 실시 예에 따른 SHA-256 암호장치의 메시지 스케줄 연산 방법을 도시한 흐름도이다.
도 5는 본 발명의 실시 예에 따른 SHA-256 암호장치의 메시지 압축 연산 방법을 도시한 흐름도이다.

Claims (22)

  1. SHA 알고리즘 기반의 암호장치에 있어서,
    하나의 덧셈기를 포함하며, 제1 라운드 이전에는 입력되는 연산 데이터 중 일부 데이터를 각 라운드 별 중간 데이터로 출력하고, 상기 제1 라운드부터는 상기 덧셈기를 이용하여, 제1 중간 데이터에 대하여 SHA 알고리즘의 제1 연산함수를 수행한 결과값, 제2 중간 데이터에 대하여 상기 SHA 알고리즘의 제2 연산함수를 수행한 결과값, 제3 중간 데이터 및 제4 중간 데이터를 복수의 단계에 걸쳐 기 설정된 순서대로 합산하여 각 라운드 별 중간 데이터로 출력하는 메시지 스케줄부; 및
    상기 메시지 스케줄부에서 각 라운드 별로 출력되는 중간 데이터를 이용한 메시지 압축 연산을 수행하여 해쉬 연산의 최종 결과 데이터를 생성하는 메시지 압축부
    를 포함하는 암호장치.
  2. 제 1항에 있어서,
    상기 메시지 스케줄부 및 상기 메시지 압축부의 연산 수행 순서와 결과 저장 과정을 제어하기 위한 제어신호를 출력하는 제어부
    를 더 포함하는 암호장치.
  3. 제 2항에 있어서,
    상기 메시지 스케줄부는,
    상기 입력되는 데이터의 크기와 동일한 크기를 가지며, 상기 제어부의 제어신호를 토대로, 상기 제1 라운드 이전에는 상기 입력되는 연산 데이터를 각 라운드 별 중간 데이터로 저장하고 상기 제1 라운드부터는 상기 메시지 스케줄부에서 각 라운드 별로 출력되는 중간 데이터를 저장하는 메모리; 및
    상기 제어부의 제어신호를 토대로, 상기 제1 라운드 이전에는 상기 입력되는 연산 데이터를 선택하여 상기 메모리로 출력하고, 상기 제1 라운드부터는 상기 메시지 스케줄부에서 각 라운드 별로 출력되는 중간 데이터를 선택하여 상기 메모리로 출력하는 제1 멀티플렉서
    를 더 포함하는 암호장치.
  4. 제 3항에 있어서,
    상기 메모리는,
    상기 제어부의 제어신호를 토대로, 상기 제1 라운드 이전에는 상기 입력되는 연산 데이터 중 일부 데이터를 각 라운드 별 중간 데이터로 출력하고, 상기 제1 라운드부터는 각 단계 별로 상기 제1 중간 데이터, 상기 제2 중간 데이터, 상기 제3 중간 데이터 및 상기 제4 중간 데이터 중 하나를 출력하는 것을 특징으로 하는 암호장치.
  5. 제 4항에 있어서,
    상기 메시지 스케줄부는,
    상기 메모리로부터 출력되는 상기 제1 중간 데이터에 대하여 상기 제1 연산함수를 수행한 결과값을 출력하는 제1 연산함수 연산부; 및
    상기 메모리로부터 출력되는 상기 제2 중간 데이터에 대하여 상기 제2 연산함수를 수행한 결과값을 출력하는 제2 연산함수 연산부
    를 더 포함하는 암호장치.
  6. 제 5항에 있어서,
    상기 메시지 스케줄부는,
    상기 제어부의 제어신호를 토대로, 상기 제1 라운드부터는 각 단계 별로 상기 제1 연산함수 연산부의 출력값, 상기 제2 연산함수 연산부의 출력값 및 상기 메모리에서 출력되는 상기 제3 중간 데이터 중 하나를 선택하여 상기 덧셈기로 출력하는 제2 멀티플렉서
    를 더 포함하는 암호장치.
  7. 제 6항에 있어서,
    상기 메시지 스케줄부는,
    상기 제어부의 제어신호를 토대로, 상기 제1 라운드 이전에는 상기 메모리에서 출력되는 각 라운드 별 중간 데이터를 선택하여 출력하고, 상기 제1 라운드부터는 각 단계 별로 상기 메모리에서 출력되는 상기 제4 중간 데이터 및 상기 덧셈기 의 출력값 중 하나를 선택하여 출력하는 제3 멀티플렉서; 및
    상기 제3 멀티플렉서의 출력값을 저장하며, 저장된 값을 상기 메모리 및 상기 덧셈기로 출력하는 레지스터
    를 더 포함하는 암호장치.
  8. 제 1항 내지 제 7항 중 어느 한 항에 있어서,
    상기 SHA 알고리즘은 SHA-256 알고리즘인 것을 특징으로 하는 암호장치.
  9. SHA 알고리즘 기반의 암호장치에 있어서,
    입력되는 연산 데이터를 이용하여 각 라운드 별 중간 데이터를 생성하여 출력하는 메시지 스케줄부; 및
    하나의 덧셈기 및 복수의 레지스터를 포함하며, 해쉬 연산이 시작되면 상기 복수의 레지스터에 복수의 초기값을 로드하고, 초기값 로드가 완료되면 메시지 압축 연산의 각 라운드 별로, 상기 복수의 레지스터에 저장된 값, 상기 복수의 레지스터에 저장된 값을 이용하여 해쉬 연산의 연산함수들을 각각 수행한 결과값들, 상기 중간 데이터 및 라운드 상수를 복수의 단계에 걸쳐 기 설정된 순서대로 상기 덧셈기를 통해 합산하고, 상기 덧셈기를 통해 합산한 값을 이용하여 상기 복수의 레지스터에 저장된 값을 업데이트하며, 상기 복수의 라운드에 걸쳐 수행되는 메시지 압축 연산이 완료되면 상기 복수의 초기값과 상기 복수의 레지스터에 저장된 값을 합산하여 최종 결과 데이터를 생성하는 압축부
    를 포함하는 암호장치.
  10. 제 9항에 있어서,
    상기 메시지 스케줄부 및 상기 메시지 압축부의 연산 수행 순서와 결과 저장 과정을 제어하기 위한 제어신호를 출력하는 제어부
    를 더 포함하는 암호장치.
  11. 제 9항에 있어서,
    상기 메시지 압축부는,
    상기 복수의 레지스터 중 e 레지스터, f 레지스터 및 g 레지스터에 저장된 값을 이용하여 상기 연산함수들 중 제1 연산함수를 수행한 결과값을 출력하는 제1 연산함수 연산부;
    상기 e 레지스터에 저장된 값을 이용하여 상기 연산함수들 중 제2 연산함수를 수행한 결과값을 출력하는 제2 연산함수 연산부;
    상기 복수의 레지스터 중 a 레지스터, b 레지스터 및 c 레지스터에 저장된 값을 이용하여 상기 연산함수들 중 제3 연산함수를 수행한 결과값을 출력하는 제3 연산함수 연산부; 및
    상기 a 레지스터에 저장된 값을 이용하여 상기 연산함수들 중 제4 연산함수를 수행한 결과값을 출력하는 제4 연산함수 연산부
    를 포함하는 암호장치.
  12. 제 11항에 있어서,
    상기 메시지 압축부는,
    상기 복수의 초기값과 상기 라운드 상수를 저장하며, 상기 제어부의제어신호를 토대로 상기 복수의 초기값을 상기 복수의 레지스터에 로드하는 중에는 상기 복수의 초기값을 순차적으로 출력하고, 상기 메시지 압축 연산의 각 라운드 별로는 대응하는 상기 라운드 상수를 출력하며, 상기 복수의 라운드에 걸쳐 수행되는 메시지 압축 연산이 완료되면 상기 복수의 초기값을 순차적으로 출력하는 메모리
    를 더 포함하는 암호장치.
  13. 제 12항에 있어서,
    상기 메시지 압축부는,
    상기 복수의 초기값을 상기 복수의 레지스터에 로드하는 중에는 상기 메모리에서 출력되는 초기값을 선택하여 출력하고, 상기 메시지 압축 연산의 각 라운드 별로는 상기 제1 연산함수 연산부의 출력값, 상기 제2 연산함수 연산부의 출력값, 상기 제3 연산함수 연산부의 출력값, 상기 복수의 레지스터 중 d 레지스터에 저장된 값, 상기 중간 데이터 및 상기 라운드 상수 중 하나를 각 단계 별로 선택하여 출력하고, 상기 복수의 라운드에 걸쳐 수행되는 메시지 압축 연산이 완료되면 상기 메모리에서 출력되는 초기값을 선택하여 출력하는 멀티플렉서
    를 더 포함하고,
    상기 덧셈기는, 상기 복수의 레지스터 중 h 레지스터에 저장된 값과 상기 멀티플렉서의 출력값을 합산하여 상기 a 레지스터, 상기 d 레지스터 및 상기 h 레지스터로 출력하는 것을 특징으로 하는 암호장치.
  14. 제 9항 내지 제13항 중 어느 한 항에 있어서,
    상기 복수의 레지스터는 시프트 레지스터인 것을 특징으로 하는 암호장치.
  15. SHA 알고리즘 기반의 암호장치의 메시지 스케줄 연산 방법에 있어서,
    연산 데이터가 입력되면, 상기 연산 데이터를 복수의 블록으로 분류하여 상기 연산 데이터와 동일한 크기의 메모리에 저장하는 단계;
    제1 라운드 이전에는 상기 메모리에 저장된 복수의 블록을 상기 제1 라운드 이전의 각 라운드 별 중간 데이터로 순차적으로 출력하는 단계; 및
    상기 제1 라운드부터는 각 라운드 별로 이전 제1 라운드에서 출력된 제1 중간 데이터에 대하여 SHA 알고리즘의 제1 연산함수를 수행한 결과값, 이전 제2 라운드에서 출력된 제2 중간 데이터에 대하여 상기 SHA 알고리즘의 제2 연산함수를 수행한 결과값, 이전 제3 라운드 및 제 4라운드에서 출력된 제3 중간 데이터 및 제4 중간 데이터를 하나의 덧셈기를 이용하여 복수의 단계에 걸쳐 기 설정된 순서대로 합산하여 상기 제1 라운드부터의 각 라운드 별 중간 데이터를 출력하는 단계
    를 포함하는 방법.
  16. 제 15항에 있어서,
    상기 제1 라운드부터의 각 라운드 별 중간 데이터는 상기 메모리에 순차적으로 저장되며, 상기 제1 중간 데이터, 상기 제2 중간 데이터, 상기 제3 중간 데이터 및 상기 제4 중간 데이터는 상기 메모리에서 출력되는 것을 특징으로 하는 방법.
  17. 제 16항에 있어서,
    상기 제1 라운드부터의 각 라운드 별 중간 데이터를 출력하는 단계는,
    상기 덧셈기를 통해 상기 제3 중간 데이터 및 상기 제1 연산함수를 수행한 결과값을 합산한 제1 결과값을 출력하는 단계;
    상기 덧셈기를 통해 상기 제1 결과값에 상기 제4 중간 데이터를 합산한 제2 결과값을 출력하는 단계; 및
    상기 덧셈기를 통해 상기 제2 결과값에 상기 제2 연산함수를 수행한 결과값을 합산한 제3 결과값을 출력하는 단계
    를 포함하고,
    상기 제3 결과값이 대응하는 라운드의 중간 데이터인 것을 특징으로 하는 방법.
  18. SHA 알고리즘 기반의 암호장치의 메시지 스케줄 연산을 통해 생성된 각 라운드 별 중간데이터를 이용하여 제1 연산함수, 제2 연산함수, 제3 연산함수 및 제4 연산함수를 포함하는 메시지 압축 연산을 수행하는 방법에 있어서,
    복수의 초기값을 제1 레지스터, 제2 레지스터 및 제3 레지스터를 포함하는 복수의 레지스터에 로드하는 단계;
    상기 제1 레지스터에 저장된 값, 상기 복수의 레지스터 중 일부 레지스터를 이용하여 상기 제1 연산함수, 제2 연산함수, 제3 연산함수 및 제4 연산함수를 각각 수행한 결과값들, 대응하는 라운드의 중간 데이터 및 라운드 상수를 하나의 덧셈기를 이용하여 복수의 단계에 걸쳐 기 설정된 순서대로 합산하고, 각 단계 별로 상기 덧셈기를 이용하여 합산한 결과값을 상기 제1 레지스터, 상기 제2 레지스터 및 상기 제3 레지스터 중 하나에 선택적으로 저장하는 단계;
    상기 복수의 레지스터 중 상기 제3 레지스터를 제외한 나머지 레지스터에 저장된 값들을 이웃하는 레지스터로 한 단계씩 시프트 하여 저장하는 단계;
    상기 선택적으로 저장하는 단계 및 상기 시프트 하여 저장하는 단계를 복수의 라운드에 걸쳐 반복적으로 수행하는 단계; 및
    상기 복수의 레지스터에 저장된 값과 상기 복수의 초기값을 합산하여 해쉬 연산의 최종 결과 데이터를 출력하는 단계
    를 포함하는 방법.
  19. 제 18항에 있어서,
    상기 선택적으로 저장하는 단계는,
    상기 제1 레지스터에 저장된 값, 상기 제1 연산함수 및 제2 연산함수를 각각 수행한 결과값들, 대응하는 중간 데이터 및 라운드 상수를 하나의 덧셈기를 이용하 여 복수의 단계에 걸쳐 기 설정된 순서대로 합산한 제1 결과값을 상기 제1 레지스터에 저장하는 단계;
    상기 제2 레지스터에 저장된 값과 상기 제1 레지스터에 저장된 값을 상기 덧셈기를 이용하여 합산한 제2 결과값을 상기 제2 레지스터에 저장하는 단계;
    상기 제3 연산함수를 수행한 결과값에 상기 제1 레지스터에 저장된 값을 상기 덧셈기를 이용하여 합산한 제3 결과값을 상기 제1 레지스터에 저장하는 단계; 및
    상기 제4 연산함수를 수행한 결과값에 상기 제1 레지스터에 저장된 값을 상기 덧셈기를 이용하여 합산한 제4 결과값을 상기 제3 레지스터에 저장하는 단계
    를 포함하는 방법.
  20. 제 19항에 있어서,
    상기 로드하는 단계는,
    상기 복수의 초기값 중 하나를 상기 제3 레지스터에 저장하고, 상기 복수의 레지스터 중 상기 제3 레지스터를 제외한 나머지 레지스터에 저장된 값들을 이웃하는 레지스터로 한 단계씩 시프트 하여 저장하는 과정을 상기 복수의 레지스터의 수만큼 반복해서 수행하는 단계인 방법.
  21. 제 19항에 있어서,
    상기 출력하는 단계는,
    상기 복수의 초기값 중 하나와 상기 제1 레지스터에 저장된 값을 상기 덧셈기를 이용하여 합산한 값을 상기 제3 레지스터에 저장하고, 상기 복수의 레지스터 중 상기 제3 레지스터를 제외한 나머지 레지스터에 저장된 값들을 이웃하는 레지스터로 한 단계씩 시프트 하여 저장하는 과정을 상기 복수의 레지스터의 수만큼 반복해서 수행하는 단계; 및
    상기 복수의 레지스터에 저장된 값을 상기 최종 결과 데이터로 출력하는 단계
    를 포함하는 방법.
  22. 제 21항에 있어서,
    상기 복수의 레지스터에 저장된 상기 최종 결과 데이터는 다음 메시지 압축 연산의 초기값으로 사용되는 것을 특징으로 하는 방법.
KR1020080106552A 2008-10-29 2008-10-29 Sha 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치 KR20100047592A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020080106552A KR20100047592A (ko) 2008-10-29 2008-10-29 Sha 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치
US12/483,369 US20100104098A1 (en) 2008-10-29 2009-06-12 Cryptographic method and device for scheduling and compressing message based on secure hash algorithm
JP2009148791A JP2010107947A (ja) 2008-10-29 2009-06-23 Shaアルゴリズム基盤のメッセージスケジュール演算方法、メッセージ圧縮演算方法及びこれを行う暗号装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020080106552A KR20100047592A (ko) 2008-10-29 2008-10-29 Sha 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치

Publications (1)

Publication Number Publication Date
KR20100047592A true KR20100047592A (ko) 2010-05-10

Family

ID=42117514

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080106552A KR20100047592A (ko) 2008-10-29 2008-10-29 Sha 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치

Country Status (3)

Country Link
US (1) US20100104098A1 (ko)
JP (1) JP2010107947A (ko)
KR (1) KR20100047592A (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014051735A1 (en) * 2012-09-28 2014-04-03 Intel Corporation Instruction set for message scheduling of sha256 algorithm
WO2014105135A1 (en) * 2012-12-28 2014-07-03 Intel Corporation Instructions processors, methods, and systems to process secure hash algorithms
KR20160106570A (ko) * 2013-11-19 2016-09-12 썬라이즈 테크 그룹, 엘엘씨 블록 마이닝 방법 및 장치

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10097345B2 (en) * 2015-04-14 2018-10-09 PeerNova, Inc. Secure hash algorithm in digital hardware for cryptographic applications

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7400722B2 (en) * 2002-03-28 2008-07-15 Broadcom Corporation Methods and apparatus for performing hash operations in a cryptography accelerator

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014051735A1 (en) * 2012-09-28 2014-04-03 Intel Corporation Instruction set for message scheduling of sha256 algorithm
GB2520858A (en) * 2012-09-28 2015-06-03 Intel Corp Instruction set for message scheduling of SHA256 algorithm
GB2520858B (en) * 2012-09-28 2020-06-03 Intel Corp Instruction set for message scheduling of SHA256 algorithm
WO2014105135A1 (en) * 2012-12-28 2014-07-03 Intel Corporation Instructions processors, methods, and systems to process secure hash algorithms
US9027104B2 (en) 2012-12-28 2015-05-05 Intel Corporation Instructions processors, methods, and systems to process secure hash algorithms
US9251377B2 (en) 2012-12-28 2016-02-02 Intel Corporation Instructions processors, methods, and systems to process secure hash algorithms
US9542561B2 (en) 2012-12-28 2017-01-10 Intel Corporation Instructions processors, methods, and systems to process secure hash algorithms
US10009172B2 (en) 2012-12-28 2018-06-26 Intel Corporation Instructions processors, methods, and systems to process secure hash algorithms
US10581594B2 (en) 2012-12-28 2020-03-03 Intel Corporation Instructions processors, methods, and systems to process secure hash algorithms
US10911222B2 (en) 2012-12-28 2021-02-02 Intel Corporation Instructions processors, methods, and systems to process secure hash algorithms
KR20160106570A (ko) * 2013-11-19 2016-09-12 썬라이즈 테크 그룹, 엘엘씨 블록 마이닝 방법 및 장치

Also Published As

Publication number Publication date
JP2010107947A (ja) 2010-05-13
US20100104098A1 (en) 2010-04-29

Similar Documents

Publication Publication Date Title
TWI327855B (en) Secure pseudo-random number generator and method for operating the same,and processing circuit and machine readable medium for cenerating pseudo-random number
US10142103B2 (en) Hardware assisted fast pseudorandom number generation
KR20220028132A (ko) 암호화 순열을 위한 암호화 아키텍처
US8681976B2 (en) System and method for device dependent and rate limited key generation
US8953784B2 (en) Lightweight stream cipher cryptosystems
Aikata et al. KaLi: A crystal for post-quantum security using Kyber and Dilithium
KR20090005673A (ko) 저전력 sha-1 해쉬 연산 장치 및 이를 이용한 저전력hmac 암호 장치
KR101210607B1 (ko) 해시 암호 장치 및 방법
JP2010049037A (ja) ハッシュ値生成装置
EP3127271B1 (en) Obfuscated performance of a predetermined function
KR20100047592A (ko) Sha 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치
CN111444518A (zh) 安全处理器及其操作方法、加密或解密数据的方法
Yang et al. PLCrypto: A symmetric cryptographic library for programmable logic controllers
CN113193962B (zh) 基于轻量级模乘的sm2数字签名生成与验证器
EP3917067A1 (en) Homomorphic encryption device and ciphertext arithmetic method thereof
CN110336658B (zh) 基于aes算法的加密方法、用户设备、存储介质及装置
KR101699176B1 (ko) Hdfs 데이터 암호화 및 복호화 방법
KR20150091691A (ko) Crt-rsa 암호화 방법 및 장치와 이를 기록한 컴퓨터 판독가능 저장매체
US20130108038A1 (en) System and method for a collatz based hash function
Oder Efficient and side-channel resistant implementation of lattice-based cryptography
US9842086B2 (en) Calculation device, calculation method, and program
JP2001005384A (ja) 乱数生成方法
CN112487448B (zh) 一种加密信息处理装置、方法及计算机设备
US10785031B2 (en) Data encryption of a storage area
Hoerder et al. An evaluation of hash functions on a power analysis resistant processor architecture

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application