KR101210607B1 - 해시 암호 장치 및 방법 - Google Patents

해시 암호 장치 및 방법 Download PDF

Info

Publication number
KR101210607B1
KR101210607B1 KR1020080124199A KR20080124199A KR101210607B1 KR 101210607 B1 KR101210607 B1 KR 101210607B1 KR 1020080124199 A KR1020080124199 A KR 1020080124199A KR 20080124199 A KR20080124199 A KR 20080124199A KR 101210607 B1 KR101210607 B1 KR 101210607B1
Authority
KR
South Korea
Prior art keywords
data
message
register
hash
round
Prior art date
Application number
KR1020080124199A
Other languages
English (en)
Other versions
KR20100065721A (ko
Inventor
김무섭
박영수
박지만
김영세
주홍일
전성익
Original Assignee
한국전자통신연구원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국전자통신연구원 filed Critical 한국전자통신연구원
Priority to KR1020080124199A priority Critical patent/KR101210607B1/ko
Priority to US12/567,006 priority patent/US8275126B2/en
Priority to JP2009278269A priority patent/JP5143817B2/ja
Publication of KR20100065721A publication Critical patent/KR20100065721A/ko
Application granted granted Critical
Publication of KR101210607B1 publication Critical patent/KR101210607B1/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
    • 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
    • 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/12Details relating to cryptographic hardware or logic circuitry
    • H04L2209/122Hardware reduction or efficient architectures
    • 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
    • H04L2209/805Lightweight hardware, e.g. radio-frequency identification [RFID] or sensor

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Power Engineering (AREA)
  • Storage Device Security (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

해시 암호 장치는, SHA(Secure Hash Algorithm)-1 해시 연산과 SHA-256 해시 연산을 모두 제공할 수 있는 하드웨어 구조를 가진다. 이러한 해시 암호 장치는, 하나의 메모리와 하나의 제1 레지스터, 하나의 배타적 논리합 연산기 및 하나의 논리합 연산기를 이용하여 SHA-1 해시 연산 시 복수의 제1 라운드에 대응하는 복수의 제1 메시지 데이터를 생성하고 SHA-256 해시 연산 시 복수의 제2 라운드에 대응하는 복수의 제2 메시지 데이터를 생성하며, SHA-1 해시 연산 시 복수의 제1 메시지 데이터를 이용하여 SHA-1 해시 연산에 따른 메시지 다이제스트를 산출하고, SHA-256 해시 연산 시 복수의 제2 메시지 데이터를 이용하여 SHA-256 해시 연산에 따른 메시지 다이제스트를 산출한다.
SHA(Secure Hash Algorithm)-1, SHA-256, 암호, TCG(Trusted Computing Group)

Description

해시 암호 장치 및 방법{APPARATUS AND METHOD FOR HASH CRYPTOGRAPHY}
본 발명은 해시 암호 장치 및 방법에 관한 것으로, 특히 모바일 폰 플랫폼용 임베디드 시스템에 적용되는 해시 암호 장치 및 방법에 관한 것이다.
본 발명은 지식경제부 및 정보통신연구진흥원의 IT성장동력사업의 일환으로 수행한 연구로부터 도출된 것이다[과제관리번호: 2006-S-041-03, 과제명: 차세대 모바일 단말기의 보안 및 신뢰 서비스를 위한 공통 보안 핵심 모듈 개발].
트러스티드 플랫폼 모듈(Trusted Platform Module, 이하 "TPM"이라 함)은 트러스티드 컴퓨팅 그룹(Trusted Computing Group, 이하 "TCG"라 함)에 의해 제정된 산업 표준 규격을 기초로 한 마이크로컨트롤러로서, 하드웨어-소트프웨어의 결합을 통해 신뢰성을 갖춘 컴퓨팅 보안 목적으로, 내부에 암호화 알고리즘과 해시 알고리즘이 하드웨어적으로 구현되어 있다.
최근 들어, 급속한 무선 네트워크 기술의 발전과 더불어 디지털 정보 사회가 고도화되고 전자상거래가 활성화됨에 따라, 암호 기술은 고속 인터넷망을 기반으로 한 사회, 경제적 활동의 안정성과 신뢰성, 사용자 프라이버시 보호등을 위한 핵심 기술로서 인식되고 있다. 특히, 모바일 폰과 같은 이동용 플랫폼은 적절한 보안 조 치가 없다면, 해커나 다른 악의적인 프로그램의 공격 대상이 될 수 있다.
TCG의 모바일 폰 워킹 그룹(Mobile Phone Working Group, "이하 "WPWG"라 함)은 TCG의 보안 규격들을 모바일 폰에 적합하도록 확장하는 작업을 수행하고 있다. 이러한 보안 규격에서 모바일 폰을 위한 필수 보안 모듈인 모바일 트러스티드 모듈(Mobile Trusted Module, 이하 "MTM"이라 함)은 해당 플랫폼의 무결성을 측정하고 이를 검증하는 작업을 수행하기 위하여 키를 사용하지 않는 SHA(Secure Hash Algorithm)-1을 사용하도록 지정하고 있다. 그러나, 최근 안정적인 해시 알고리즘의 사용을 위해서는 SHA(Secure Hash Algorithm)-256의 사용을 권고 및 명시하고 있다. 따라서, 모바일 폰에서 플랫폼의 무결성과 사용자 인증 및 데이터 인증을 위한 암호 장치는 SHA-1과 SHA-256을 모바일 환경에 따라 선택적으로 사용할 수 있도록 SHA-1과 SHA-256을 모두 지원할 수 있어야 한다.
또한, 대부분의 모바일 디바이스의 경우, 메모리와 사용할 수 있는 전원 및 컴퓨팅 능력에 한계가 있으므로, TCG의 보안 규격들이 모바일 폰에 바로 적용하기에는 여러 가지 기술적 어려움이 수반된다. 특히, 모바일 폰의 경우에는 배터리의 용량에 한계가 있으므로, 추가적인 암호 연산의 구동은 배터리 수명을 더욱 단축시키는 결과를 가져오게 된다. 따라서, 모바일 폰에서의 암호 장치는 저전력 및 저면적의 최적화된 하드웨어의 설계 기술이 필요하다.
본 발명이 해결하고자 하는 기술적 과제는 SHA-1과 SHA-256을 선택적으로 사 용할 수 있는 해시 암호 장치 및 방법을 제공하는 것이다.
또한, 본 발명은 저전력 및 저면적의 최적화된 해시 암호 장치 및 방법을 제공하는 것을 그 과제로 한다.
본 발명의 한 실시 예에 따르면, 메시지 스케줄러, 메시지 압축부, 그리고 제어부를 포함하는 해시 암호 장치가 제공된다. 메시지 스케줄러는 제1 해시 연산 시에 복수의 제1 메시지 데이터를 생성하고, 제2 해시 연산 시에 복수의 제2 메시지 데이터를 생성한다. 메시지 압축부는 상기 제1 해시 연산 시에 상기 복수의 제2 메시지 데이터를 이용하여 연산 데이터에 대해 상기 제1 해시 연산을 수행하여 제1 메시지 다이제스트를 산출하고, 상기 제2 해시 연산 시에 상기 복수의 제2 메시지 데이터를 이용하여 상기 연산 데이터에 대해 상기 제2 해시 연산을 수행하여 제2 메시지 다이제스트를 산출한다. 그리고 제어부는 외부로부터 수신되는 제어 명령으로부터 상기 제1 및 제2 해시 연산 중 상기 연산 데이터에 수행할 해시 연산을 결정하고, 상기 연산 데이터의 길이에 따라 결정한 상기 해시 연산을 수행할 횟수를 결정하며, 결정한 상기 해시 연산과 상기 횟수에 따라서 상기 메시지 스케줄러 및 상기 메시지 압축부를 제어한다.
본 발명의 다른 실시 예에 따르면, 해시 암호 장치에서 제1 및 제2 해시 연산에 각각 필요한 복수의 제1 및 제2 메시지 데이터를 생성하는 메시지 스케줄러가 제공된다. 메시지 스케줄러는 메모리, 레지스터, 배타적 논리합 연산기, 회전 시프트 연산기, 로직 연산기, 그리고 논리합 연산기를 포함한다. 메모리는 연산할 블록 데이터를 N개의 서브블록 데이터로 나누어 저장하고, 레지스터는 입력되는 데이터를 저장한 후 출력한다. 배타적 논리합 연산기는 제1 해시 연산 시에 동작하며, 상기 메모리에 저장된 서브블록 데이터와 상기 레지스터에 저장된 데이터를 배타적 논리합 연산하여 상기 레지스터의 데이터를 갱신한다. 회전 시프트 연산기는 상기 배타적 논리합 연산기에 의해 상기 배타적 논리합 연산이 소정 횟수 반복된 후에 상기 레지스터에 저장된 데이터를 회전 시프트하여 출력한다. 로직 연산기는 제2 해시 연산 시에 동작하며, 상기 메모리에 저장된 서브블록 데이터 중 어느 하나에 대해서 복수의 로직 연산 중 대응하는 로직 연산을 수행한다. 그리고 논리합 연산기는 상기 로직 연산기에서 출력되는 데이터와 상기 레지스터에 저장된 데이터를 논리합 연산하여 상기 레지스터의 데이터를 갱신한다. 이때,
상기 제1 해시 연산 시에 상기 N개의 서브블록 데이터와 상기 회전 시프트 연산기의 출력 데이터가 상기 복수의 제1 메시지 데이터로 각각 사용되고, 상기 제2 해시 연산 시에 상기 N개의 서브블록 데이터와 소정 개수의 제2 메시지 데이터에 대하여 상기 대응하는 로직 연산과 상기 논리합 연산을 반복한 후 상기 논리합 연산에 따른 데이터가 상기 복수의 제2 메시지 데이터로 각각 사용된다.
본 발명의 또 다른 실시 예에 따르면, 해시 암호 장치에서 연산할 블록 데이터에 대해 해시 연산을 수행하여 메시지 다이제스트를 산출하는 메시지 압축 장치가 제공된다. 메시지 압축 장치는 복수의 레지스터, 그리고 논리합 연산기를 포함한다. 복수의 레지스터는 입력되는 데이터를 저장한 후 출력하며, 앞단의 레지스터로부터 출력되는 데이터가 뒷단의 레지스터로 입력되는 구조로 연결되어 있다. 그리고 논리합 연산기는 제1 해시 연산 시에 입력되는 복수의 제1 데이터 중에서 선택되는 제1 데이터와 상기 복수의 레지스터 중 제1 레지스터에 저장된 데이터를 논리합 연산하여 상기 제1 레지스터의 데이터를 갱신하고, 제2 해시 연산 시에 입력되는 복수의 제2 데이터 중에서 선택되는 제2 데이터와 상기 복수의 레지스터 중 제2 레지스터에 저장된 데이터를 논리합 연산하여 상기 제2 레지스터의 데이터를 갱신한다. 이때, 상기 제1 해시 연산 시에 상기 제1 데이터의 선택을 달리하면서 상기 논리합 연산을 제1 횟수만큼 반복한 후 상기 논리합 연산기로부터 출력되는 데이터를 상기 복수의 레지스터 중 맨 앞에 위치한 제3 레지스터에 저장하고 상기 복수의 레지스터를 시프트 레지스터로 동작시키는 제1 라운드 연산을 수행하고, 상기 제1 라운드 연산을 상기 제1 해시 연산에서 설정된 라운드의 횟수만큼 반복하여 상기 제1 해시 연산에 따른 메시지 다이제스트를 산출한다. 그리고 상기 제2 해시 연산 시에 상기 제2 데이터의 선택을 달리하면서 상기 논리합 연산을 제2 횟수만큼 반복한 후 상기 논리합 연산기로부터 출력되는 데이터를 상기 제3 레지스터에 저장하고 상기 복수의 레지스터를 시프트 레지스터로 동작시키는 제2 라운드 연산을 수행하고, 상기 제2 라운드 연산을 상기 제2 해시 연산에서 설정된 라운드의 횟수만큼 반복하여 상기 제2 해시 연산에 따른 메시지 다이제스트를 산출한다.
본 발명의 또 다른 실시 예에 따르면, 외부로부터 수신되는 연산 데이터를 N개의 블록 데이터로 나누어 메모리에 저장하는 단계, 상기 N개의 블록 데이터를 레지스터에 저장하는 단계, 제1 해시 연산 시 상기 레지스터에 저장한 N개의 블록 데이터를 1부터 N번째 라운드에서 사용할 제1 메시지 데이터로 생성하는 단계, 상기 제1 해시 연산 시 (N+1)부터 M번째 라운드의 각 라운드에서, 상기 제1 메시지 데이터와 상기 레지스터에 저장된 데이터를 기초로 하나의 배타적 논리합 연산기를 이용하여 설정된 횟수만큼 배타적 논리합 연산을 수행하여 해당하는 라운드의 제1 메시지 데이터를 생성하는 단계, 제2 해시 연산 시 상기 레지스터에 저장한 N개의 블록 데이터를 1부터 N번째 라운드에서 사용할 제2 메시지 데이터로 생성하는 단계, 상기 제2 해시 연산 시 (N+1)부터 K번째 라운드의 각 라운드에서, 상기 제2 메시지 데이터와 상기 레지스터에 저장된 데이터를 기초로 하나의 논리합 연산기를 이용하여 설정된 횟수만큼 논리합 연산을 수행하여 해당하는 라운드의 제2 메시지 데이터를 생성하는 단계, 상기 제1 해시 연산 시에 상기 1부터 M번째 라운드에 대응하는 M개의 제1 메시지 데이터를 이용하여 제1 메시지 다이제스트를 산출하는 단계, 그리고 상기 제2 해시 연산 시에 상기 1부터 K번째 라운드에 대응하는 제2 메시지 데이터를 이용하여 제2 메시지 다이제스트를 산출하는 단계를 포함한다.
본 발명의 실시 예에 의하면, 모바일 플랫폼용 트러스티트 컴퓨팅 시스템, RFID 시스템, 무선 네트워크 시스템, 센서 네트워크 시스템 및 홈네트워크 시스템 등 저전력 해시 함수 기능을 필요로 하는 다양한 보안 플랫폼에서 시스템의 무결성 검증과 사용자 정보를 보호하기 위한 핵심 요소 기술로 적용될 수 있다.
또한, 레지스터에 저장된 데이터가 변화하는 시점에서만 클록 신호를 인가함으로써 데이터를 처리하지 않는 하드웨어 자원이 소모하는 전력을 최소화시킬 수 있다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시 예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시 예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 및 청구범위 전체에서, 어떤 부분이 어떤 구성 요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있는 것을 의미한다. 또한, 명세서에 기재된 "…부", "…기", "모듈", "블록" 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어나 소프트웨어 또는 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다.
이제 본 발명의 실시 예에 따른 해시 암호 장치 및 방법에 대하여 도면을 참고로 하여 상세하게 설명한다.
도 1은 본 발명의 실시 예에 따른 해시 암호 장치를 나타낸 블록도이고, 도 2는 도 1에 도시한 제어부를 나타낸 블록도이다.
도 1을 참조하면, 해시 암호 장치(10)는 인터페이스부(100), 제어부(200), 메시지 스케줄러(300) 및 메시지 압축부(400)를 포함한다.
인터페이스부(100)는 해시 암호 장치(10)가 적용되는 시스템(20)의 시스템 버스(System Bus, 21)를 통해 시스템(20)의 마이크로프로세서와 인터페이스하며, 시스템(20)의 마이크로프로세서로부터 데이터와 SHA-1/SHA-256 해시 연산의 시작과 종료를 알리는 제어 신호를 수신하고, SHA-1/SHA-256 해시 연산이 종료되면 그 결과값을 시스템(20)의 마이크로프로세서로 전달한다.
제어부(200)는 SHA-1/SHA-256 해시 연산에 필요한 전반적인 데이터의 흐름을 관리하고 제어한다. 구체적으로, 제어부(200)는 인터페이스부(100)를 통한 데이터의 입력과 출력을 제어하며, 입력되는 데이터들의 주소를 검사하여 입력되는 데이터가 제어 명령인 경우에 해당 제어 명령을 저장하고, 입력되는 데이터가 SHA-1/SHA-256 해시 연산을 수행해야 할 연산 데이터이면 이를 메시지 스케줄러(300)에 저장한다. 제어부(200)는 저장된 제어 명령을 조사하여 수행할 해시 연산이 SHA-1인지 SHA-256인지를 결정하고, 인터페이스부(100)를 통해 입력되는 연산 데이터의 길이를 토대로 연산 데이터를 512 비트의 블록 데이터로 나누며, 블록 데이터의 개수에 따라서 SHA-1/SHA-256 해시 연산의 수행 횟수가 결정된다. 예를 들어, 연산 데이터의 길이가 1024 비트인 경우, 2개의 블록 데이터로 나누어지므로, 상위 비트를 포함하는 블록 데이터에 대해서 SHA-1/SHA-256 해시 연산이 수행된 후 하위 비트를 포함하는 블록 데이터에 대해서 SHA-1/SHA-256 해시 연산이 수행된다.
제어부(200)는 저장된 제어 명령을 참조하여 결정한 해시 연산에 필요한 제어 신호들을 생성하여 인터페이스부(100), 메시지 스케줄러(300) 및 메시지 압축부(400)로 전달한다.
SHA-1/SHA-256 해시 연산은 최대 264비트 길이의 데이터를 입력받아 각각 160/256 비트의 메시지 다이제스트(Message Digest)를 산출한다. 메시지 다이제스트를 산출하기 위해 SHA-1/SHA-256 해시 연산은 512 비트의 데이터를 기본 블록 단위로 수행되며, 한 개의 기본 블록의 데이터에 대해 SHA-1 해시 연산은 80 라운드에 걸쳐 수행되며, SHA-256 해시 연산은 64 라운드에 걸쳐 수행된다. 따라서, 1024 비트의 연산 데이터의 경우에는 2회의 SHA-1/SHA-256 해시 연산이 수행될 수 있다. 즉, 상위 512 비트에 대해 80/64 라운드의 SHA-1/SHA-256 해시 연산이 수행된 후, 하위 512 비트에 대해 80/64 라운드의 SHA-1/SHA-256 해시 연산이 수행될 수 있다.
또한, 제어부(200)는 메시지 스케줄러(300) 및 메시지 압축부(400)의 내부 하드웨어 모듈들의 구동에 필요한 연산의 수행 순서들과 연산 결과들을 저장하는 동작을 80/64 라운드에 걸쳐 제어한다.
도 2를 참조하면, 제어부(200)는 카운터(210, 220), 상태 천이부(230) 및 레지스터(240)를 포함한다.
카운터(210)는 SHA-1/SHA-256 해시 연산을 수행하는 동안 SHA-1/SHA-256 해시 연산이 수행되는 라운드 정보를 계수하고, 현재 수행되는 라운드의 정보를 상태 천이부(230)로 제공한다. 카운터(210)는 8비트 카운터로 사용될 수 있다.
카운터(220)는 현재 수행되는 라운드에서 내부 클록 사이클의 진행 정보를 저장하고, 이 정보를 상태 천이부(230)로 제공한다. 이때, 카운터(210)는 4비트 카운터로 사용될 수 있다.
상태 천이부(230)는 SHA-1/SHA-256 해시 연산을 위한 유한 개의 상태를 각각 가지고 있으며, 카운터(210, 220)로부터 현재 수행되는 라운드의 정보 및 내부 클록 사이클의 진행 정보를 기반으로 하여 주어지는 입력에 따라 현재 상태로부터 다른 상태로 상태 전이(state transition)를 하며, 이에 동기화하여 제어 신호를 생성하고, 생성한 제어 신호를 인터페이스부(100), 메시지 스케줄링부(300) 및 메시지 압축부(400)로 전달한다.
레지스터(240)는 입력되는 제어 명령을 저장한다.
다시, 도 1을 보면, 메시지 스케줄러(300)는 입력되는 블록 데이터를 저장하고, 블록 데이터로부터 80/60 라운드에 걸쳐 수행되는 SHA-1/SHA-256 해시 연산에 필요한 80/60개의 메시지 데이터(Wt)를 생성하여 각 라운드에 대응하는 메시지 데이터(Wt)를 메시지 압축부(400)로 제공한다. 이때, SHA-1 해시 연산에 필요한 메시지 데이터(Wt)는 수학식 1과 같이 생성될 수 있으며, SHA-256 해시 연산에 필요한 메시지 데이터(Wt)는 수학식 2와 같이 생성될 수 있다.
즉, 수학식 1 및 2에 표현한 것처럼, 1에서 16 라운드까지 해시 연산에 사용되는 메시지 데이터(Wt)로는 512 비트의 블록 데이터를 32 비트로 나눈 16개의 32 비트의 서브 블록 데이터(M1-M16)가 사용되고, 17-80/17-64 라운드까지의 SHA-1/SHA-256 해시 연산에 사용되는 메시지 데이터(Wt)로는 설정된 조합 논리 회로를 이용하여 별도로 생성하여 사용된다. 여기서, M1은 512 비트의 블록 데이터에서 최 상위 32 비트의 데이터를 포함하는 1번째 서브 블록 데이터이고, M16은 512 비트의 블록 데이터에서 최하위 32 비트의 데이터를 포함하는 16번째 서브 블록 데이터이다.
Figure 112008084485933-pat00001
여기서, t는 라운드의 수이고, Mt는 512 비트의 블록 데이터에서 t번째 라운드에서 사용될 t번째 서브 블록 데이터이다. ROT는 회전 시프트(rotate-shift) 연산이며, ROTLEFT1는 1비트씩 왼쪽으로 이동시키는 연산을 의미한다.
Figure 112008084485933-pat00002
는 비트 단위로 수행되는 배타적 논리합(XOR) 연산이다.
Figure 112008084485933-pat00003
여기서, t는 라운드의 수이고, +는 모듈러 덧셈 연산이다.
Figure 112008084485933-pat00004
Figure 112008084485933-pat00005
은 로직 함수로서, 각각 수학식 3 및 4와 같이 나타낼 수 있다.
Figure 112008084485933-pat00006
Figure 112008084485933-pat00007
수학식 3 및 4에서, RN은 N비트를 오른쪽으로 시프트하는 연산으로, 시프트되는 비트 수만큼 "0"으로 채워지는 연산을 의미하고, SN은 N비트를 오른쪽으로 회전시키는 연산을 의미한다.
메시지 압축부(400)는 메시지 스케줄러(300)로부터 제공되는 32비트의 메시지 데이터(Wt)를 80/64 라운드에 거쳐 SHA-1/SHA-256 해시 연산을 수행하고, 그 결과 값인 메시지 다이제스트(Message Digest)를 저장한다. 이때, SHA-1 해시 연산 및 SHA-256 해시 연산은 각각 수학식 5 및 6과 같이 수행될 수 있다.
수학식 5 및 6에서 표현한 것처럼, SHA-1 해시 연산을 위해서는 5개의 변수(a-e)가 사용되고, SHA-256 해시 연산을 위해서는 8개의 변수(a-h)가 사용되며, 이들 변수들은 라운드에 따라 한 단계씩 시프트 이동되거나 미리 정해져 있는 연산에 따라 각각 다른 값들을 저장한다.
Figure 112008084485933-pat00008
Figure 112008084485933-pat00009
수학식 5에서, Kt는 SHA-1 해시 연산에서 정의하는 라운드 상수이며, 연산되 는 라운드에 따라 미리 설정된 값을 갖는다. ft는 SHA-1 해시 연산에서 사용하는 로직 함수로, 수학식 7과 같이 나타낼 수 있다.
또한, 수학식 6에서, Ch, Maj,
Figure 112008084485933-pat00010
Figure 112008084485933-pat00011
은 각각 로직 함수로서, 각각 수학식 8 내지 11과 같이 나타낼 수 있다.
Figure 112008084485933-pat00012
Figure 112008084485933-pat00013
Figure 112008084485933-pat00014
수학식 8 및 9에서,
Figure 112008084485933-pat00015
는 비트 단위로 수행되는 논리곱(AND) 연산이다.
Figure 112008084485933-pat00016
Figure 112008084485933-pat00017
다음으로, 본 발명의 실시 예에 따른 메시지 스케줄러의 하드웨어 구조에 대해 도 3 내지 도 5를 참고로 하여 자세하게 설명한다.
도 3은 본 발명의 실시 예에 따른 메시지 스케줄러의 하드웨어 구조를 나타낸 도면이다. 도 4 및 도 5은 각각 SHA-1 및 SHA-256에서의 메시지 데이터를 생성하기 위한 하드웨어 구조를 나타낸 도면이다.
도 3을 참조하면, 메시지 스케줄러(300)는 메모리(302), 로직 함수 연산기(304, 306), 배타적 논리합 연산기(308), 논리합 연산기(310), 레지스터(312), 회전 시프트 연산기(314, 316) 및 선택기(318, 320, 322, 324, 326)를 포함한다. 이들 메모리(302), 로직 함수 연산기(304, 306), 배타적 논리합 연산기(308), 논리합 연산기(310), 레지스터(312), 회전 시프트 연산기(314, 316) 및 선택기(318, 320, 322, 324, 326)는 제어부(200)에서 전달되는 제어 신호에 따라 동작한다. 도 3에서는 로직 함수 연산기(304, 305)가 각각 수행할 로직 함수를
Figure 112008084485933-pat00018
Figure 112008084485933-pat00019
로 도시하였고, 회전 시프트 연산기(314, 316)가 수행할 연산을 <<1로 도시하였다.
메모리(302)는 입력단과 출력단을 가지며, 시스템(20)의 마이크로프로세서로부터 전송되는 512 비트의 블록 데이터를 저장한다.
로직 함수 연산기(304, 306)는 입력단과 출력단을 가지며, 입력단으로 입력되는 데이터에 대해 SHA-256 해시 연산에 필요한 각각 수학식 3 및 4에 해당하는 연산을 수행하여 출력단을 통해 출력한다.
배타적 논리합 연산기(308)는 두 입력단과 출력단을 가지며, 두 입력단으로 입력되는 데이터를 곱셈 연산하여 출력단을 통해 출력한다. 즉, 배타적 논리합 연산기(308)는 SHA-1 해시 연산에 필요한 수학식 1의 "
Figure 112008084485933-pat00020
"에 해당하는 연산을 수행 한다.
논리합 연산기(310)는 두 입력단과 출력단을 가지며, 두 입력단으로 입력되는 데이터를 덧셈 연산하여 출력단을 통해 출력한다.
레지스터(312)는 입력단과 출력단을 가지며, 입력단으로 입력되는 데이터를 저장하고, 저장한 데이터를 출력단을 통해 출력한다. 본 발명의 실시 예에서는 하나의 배타적 논리합 연산기(308)를 이용하여 17부터 80 라운드에 해당하는 수학식 1의 연산을 수행하고, 하나의 논리합 연산기(310)를 이용하여 17부터 64 라운드에 해당하는 수학식 2의 연산을 수행한다. 이를 위해, 하나의 배타적 논리합 연산기(308)는 4회의 곱셈 연산을 반복하며, 하나의 논리합 연산기(310) 또한 4회의 덧셈 연산을 반복하므로, 레지스터(312)에는 이전의 연산 값 즉, SHA-1/SHA-256 해시 연산에 필요한 메시지 데이터(Wt)를 계산하는 데 있어서 중간 값들이 저장된다.
회전 시프트 연산기(314, 316)는 입력단과 출력단을 가지며, 입력단으로 입력되는 데이터를 1비트씩 왼쪽으로 회전시켜 출력단을 통해 출력한다. 즉, 회전 시프트 연산기(314, 316)는 수학식 1의 "ROTLEFT1"에 해당하는 연산을 수행한다.
선택기(318, 324, 326)는 각각 두 입력단과 출력단을 가지며, 제어부(200)에서 결정한 SHA-1/SHA-256 해시 연산에 따라 두 입력단으로 입력되는 데이터 중 하나를 선택하여 출력단을 통해 출력한다. 또한, 선택기(320, 322)는 세 입력단과 출력단을 가지며, 제어부(200)에서 결정한 SHA-1/SHA-256 해시 연산에 따라 세 입력단으로 입력되는 데이터 중 하나를 선택하여 출력단을 통해 출력한다.
구체적으로, 제1 입력단으로부터 512 비트의 블록 데이터를 입력받는 선택기(318)의 제2 입력단이 선택기(326)의 출력단과 연결되어 있으며, 선택기(318)의 출력단에 입력단이 연결되어 있는 메모리(302)의 출력단이 선택기(320, 322)의 제1 입력단, 로직 함수 연산기(304, 306)의 입력단 및 배타적 논리합 연산기(308)의 제1 입력단에 연결되어 있다. 로직 함수 연산기(304, 306)의 출력단이 각각 선택기(320)의 제2 및 제3 입력단에 연결되어 있고, 선택기(320)의 출력단이 논리합 연산기(310)의 제1 입력단에 연결되어 있다. 배타적 논리합 연산기(308)의 출력단 및 논리합 연산기(310)의 출력단이 선택기(322)의 제2 및 제3 입력단에 각각 연결되어 있고, 선택기(322)의 출력단이 레지스터(312)의 입력단 및 회전 시프트 연산기(316)의 입력단에 연결되어 있다. 또한, 레지스터(312)의 출력단이 선택기(324)의 제1 입력단, 회전 시프트 연산기(314)의 입력단 및 배타적 논리합 연산기(308)의 제2 입력단에 연결되어 있다. 선택기(324)의 제2 입력단이 회전 시프트 연산기(314)의 출력단에 연결되어 있고, 선택기(324)의 출력단 및 회전 시프트 연산기(316)의 출력단이 각각 선택기(326)의 제1 및 제2 입력단에 연결되어 있으며, 선택기(326)의 출력단이 선택기(318)의 입력단에 연결되어 있다. 이때, 선택기(324)의 출력단을 통해 출력되는 데이터가 해당 라운드에서의 메시지 데이터(Mt)가 된다.
이러한 메시지 스케줄러(300)에서 SHA-1 해시 연산을 위한 단계별 세부 동작은 표 1과 같이 이루어진다. 표 1은 SHA-1 해시 연산을 위한 단계별 세부 동작을 나타내는 표이다. 표 1에서 "x"는 어떤 값이든 전체 연산에 상관없음을 나타내고, "→"는 왼쪽 칸의 값과 동일한 값을 나타낸다. "Mout"는 메모리(302)로부터 출력되는 데이터를 나타내고, "M1" 및 "M2"는 각각 선택기(322, 324)로부터 출력되는 데이터를 나타내며, "R1"는 레지스터(312)로부터 출력되는 데이터를 나타낸다. 또한, "reg_w"는 레지스터(312)에 저장된 데이터를 의미하며, "<<1(reg_w)t"는 t 라운드에서 레지스터(312)에 저장된 데이터가 1비트씩 왼쪽으로 회전된 데이터를 나타낸다.
Figure 112008084485933-pat00021
먼저, 제어부(200)로부터의 제어 신호에 따라서, 메시지 스케줄러(300)의 메모리(302), 배타적 논리합 연산기(308), 선택기(318, 322, 324), 레지스터(312) 및 회전 시프트 연산기(314, 316)는 SHA-1 해시 연산을 위한 로직 연산부로 동작하여, SHA-1 해시 연산에 사용할 1부터 80 라운드에서의 메시지 데이터(Wt)를 생성한다.
표 1을 참조하면, 메시지 스케줄러(300)는 512 비트의 블록 데이터를 이용하여 1 클록 사이클에 걸쳐서 1부터 16 라운드에 사용할 메시지 데이터(Wt)를 생성한다. 즉, 인터페이스부(100)를 통해 512 비트의 블록 데이터가 입력되면, 이 블록 데이터는 선택기(318)를 통해 메모리(302)에 저장된다. 메모리(302)에 저장된 블록 데이터는 선택기(322)를 통해 레지스터(312)에 저장된다. 그리고 나서, 레지스터(312)는 t가 1에서 16이 될 때까지 저장된 블록 데이터 중 t 번째 서브 블록 데이터를 선택기(324)를 통해 메시지 압축부(400)로 순차적으로 출력한다. 이때, 메시지 압축부(400)로 출력되는 각 서브 블록 데이터가 해당 라운드에서의 메시지 데이터(Wt)로 사용된다.
다음, 메시지 스케줄러(300)는 4 클록 사이클(①-④)에 걸쳐서 16부터 80 라운드에서의 각 메시지 데이터(Wt)를 생성한다.
구체적으로, 클록 사이클(①)에서, 메모리(302)는 저장된 512 비트의 블록 데이터에서 (t-16)번째 서브 블록 데이터(Mt-16)를 출력한다. 메모리(302)에서 출력되는 서브 블록 데이터(Mt-16)는 선택기(322)를 통해 레지스터(312)에 저장된다. 그리고 레지스터(312)에 저장된 서브 블록 데이터(Mt-16)는 배타적 논리합 연산기(308)의 제2 입력단으로 입력된다.
이어서, 클록 사이클(②)에서, 메모리(302)는 저장된 512 비트의 블록 데이터에서 (t-14)번째 서브 블록 데이터(Mt-14)를 배타적 논리합 연산기(308)의 제1 입력단으로 출력한다. 배타적 논리합 연산기(308)는 두 입력단으로 입력된 데이터(Mt-16, Mt-14)를 곱셈 연산하여 출력한다. 배타적 논리합 연산기(308)에서 출력된 데이터(Mt-14
Figure 112009013658310-pat00022
Mt-16)는 선택기(322)를 통해 레지스터(312)에 저장된다. 그리고 레지스터(312)에 저장된 데이터(Mt-14
Figure 112009013658310-pat00023
Mt-16)는 배타적 논리합 연산기(308)의 제2 입력단으로 입력된다.
클록 사이클(③)에서, 메모리(302)는 저장된 512 비트의 블록 데이터에서 (t-8)번째 서브 블록 데이터(Mt-8)를 배타적 논리합 연산기(308)의 제1 입력단으로 출력한다. 배타적 논리합 연산기(308)는 두 입력단으로 입력된 입력된 데이터(Mt-8, Mt-14
Figure 112009013658310-pat00024
Mt-16)를 곱셈 연산하여 출력한다. 배타적 논리합 연산기(308)에서 출력된 데이터(Mt-8
Figure 112009013658310-pat00025
Mt-14
Figure 112009013658310-pat00026
Mt-16)는 선택기(322)를 통해 레지스터(312)에 저장된다. 레지스터(312)에 저장된 데이터(Mt-8
Figure 112009013658310-pat00027
Mt-14
Figure 112009013658310-pat00028
Mt-16)는 다시 배타적 논리합 연산기(308)의 제2 입력단으로 입력된다.
마지막 클록 사이클(④)에서, 메모리(302)는 저장된 512 비트의 블록 데이터에서 (t-3)번째 서브 블록 데이터(Mt-3)를 배타적 논리합 연산기(308)의 제1 입력단으로 출력한다. 배타적 논리합 연산기(308)는 두 입력단으로 입력된 데이터(Mt-3, Mt-8
Figure 112009013658310-pat00029
Mt-14
Figure 112009013658310-pat00030
Mt-16)를 곱셈 연산하여 출력한다. 배타적 논리합 연산기(308)에서 출력된 데이터(Mt-3
Figure 112009013658310-pat00031
Mt-8
Figure 112009013658310-pat00032
Mt-14
Figure 112009013658310-pat00033
Mt-16)는 선택기(322)를 통해 레지스터(312)에 저장된다. 또한, 배타적 논리합 연산기(308)에서 출력된 데이터(Mt-3
Figure 112009013658310-pat00034
Mt-8
Figure 112009013658310-pat00035
Mt-14
Figure 112009013658310-pat00036
Mt-16)는 선택기(322)를 통해 회전 시프트 연산기(316)로 입력된다.
레지스터(312)는 저장된 데이터(Mt-3
Figure 112009013658310-pat00037
Mt-8
Figure 112009013658310-pat00038
Mt-14
Figure 112009013658310-pat00039
Mt-16)를 회전 시프트 연산기(314)로 출력한다. 회전 시프트 연산기(314)는 데이터(Mt-3
Figure 112009013658310-pat00040
Mt-8
Figure 112009013658310-pat00041
Mt-14
Figure 112009013658310-pat00042
Mt-16)를 1비트씩 왼쪽으로 회전시킨 후 출력한다. 회전 시프트 연산기(314)에서 출력된 데이터[<<1(reg_w)t]는 선택기(324)를 거쳐 메시지 압축부(400)로 입력되며, 선택기(324)에서 출력된 데이터[<<1(reg_w)t]가 t 번째 라운드에서의 메시지 데이터(Wt)로 사용된다.
또한, 회전 시프트 연산기(316)는 데이터(Mt-3
Figure 112009013658310-pat00043
Mt-8
Figure 112009013658310-pat00044
Mt-14
Figure 112009013658310-pat00045
Mt-16)를 1비트씩 왼쪽으로 회전시킨 후 출력한다. 회전 시프트 연산기(316)에서 출력된 데이터[<<1(reg_w)t]는 선택기(326, 318)를 거쳐 메모리(302)의 서브 블록 데이터의 위치(Mt-18)에 저장된다.
이와 달리, 선택기(324)에서 출력된 데이터[<<1(reg_w)t]가 선택기(326, 318)를 거쳐 메모리(302)의 서브 블록 데이터의 위치(Mt-18)에 저장될 수도 있다. 이와 같이 선택기(324)에서 출력된 데이터[<<1(reg_w)t]가 선택기(326, 318)를 거쳐 메모리(302)의 서브 블록 데이터의 위치(Mt-18)에 저장되는 경우에는 회전 시프트 연산기(316) 및 다중화기(326)를 제거할 수 있으나, 한 라운드의 메시지 데이터 연산에 필요한 클록 사이클의 수가 1클록만큼 증가될 수 있다.
이와 같이, 마지막 클록 사이클(④)이 끝나면, 한 라운드의 메시지 데이터(Wt)가 생성된다.
따라서, 메시지 스케줄러(300)는 17 라운드부터 80 라운드까지 매 라운드에서 단계(①-④)를 반복함으로써 17 라운드부터 80 라운드에서의 메시지 데이터(Wt)를 생성하여 메시지 압축부(400)로 출력하며, 생성된 메시지 데이터(Wt)들은 메모리(302)의 서브 블록 데이터의 위치(Mt-16)에 저장된다. 따라서, 메모리(302)의 액세스 주소는 연산할 라운드를 i라 할 때 (i mod 24)로 정의될 수 있다.
또한, 메시지 스케줄러(300)에서 SHA-256 해시 연산을 위한 단계별 세부 동작은 표 2과 같이 이루어진다. 표 2는 SHA-256 해시 연산을 위한 단계별 세부 동작을 나타내는 표이다. 표 2에서 "x"는 어떤 값이든 전체 연산에 상관없음을 나타내고, "→"는 왼쪽 칸의 데이터와 동일한 값을 나타낸다. "Mout"는 메모리(302)로부터 출력되는 데이터를 나타내고, "M1" 및 "M3"는 각각 선택기(322, 320)로부터 출력되는 데이터를 나타내며, "R1"는 레지스터(312)로부터 출력되는 데이터를 나타낸다. 또한, "A1"는 논리합 연산기(310)에서 출력되는 데이터를 나타낸다.
Figure 112008084485933-pat00046
먼저, 제어부(200)로부터의 제어 신호에 따라서, 메시지 스케줄러(300)의 메모리(302), 로직 함수 연산기(304, 306), 논리합 연산기(310), 선택기(318, 320, 322, 324, 326) 및 레지스터(312)는 SHA-256 해시 연산을 위한 로직 연산부로 동작하여, SHA-256 해시 연산에서 1부터 64 라운드에서의 메시지 데이터(Wt)를 생성한다.
표 2를 참조하면, 메시지 스케줄러(300)는 SHA-1 해시 연산에서와 동일한 방법으로, 1 클록 사이클에 걸쳐서 1부터 16 라운드에 사용할 메시지 데이터(Wt)를 생성한다.
다음, 메시지 스케줄러(300)는 4 클록 사이클(①-④)에 걸쳐서 16부터 64 라운드에서의 각 메시지 데이터(Wt)를 생성한다.
구체적으로, 클록 사이클(①)에서, 메모리(302)는 저장된 512 비트의 블록 데이터에서 (t-16)번째 서브 블록 데이터(Mt-16)를 선택기(322)로 출력한다. 메모리(302)에서 출력되는 서브 블록 데이터(Mt-16)는 선택기(322)를 통해 레지스터(312)에 저장된다. 레지스터(312)에 저장된 데이터(Mt-16)는 선택기(324)를 거쳐 논리합 연산기(310)의 제2 입력단으로 입력된다.
클록 사이클(②)에서, 메모리(302)는 저장된 512 비트의 블록 데이터에서 (t-15)번째 서브 블록 데이터(Mt-15)를 로직 함수 연산기(304)로 출력한다. 로직 함수 연산기(304)는 서브 블록 데이터(Mt-15)에 대해 수학식 3에 해당하는 연산을 수행한 후 출력한다. 로직 함수 연산기(304)에서 출력된 데이터[
Figure 112008084485933-pat00047
(Mt-15)]는 선택기(320)를 통해 논리합 연산기(310)의 제1 입력단으로 입력된다. 논리합 연산기(310)는 두 입력단으로 입력된 데이터[
Figure 112008084485933-pat00048
(Mt-15), Mt-16]를 덧셈 연산하여 출력한다. 논리합 연산기(310)에서 출력된 데이터[
Figure 112008084485933-pat00049
(Mt-15)+Mt-16]는 선택기(322)를 통해 레지스터(312)에 저장된다. 그리고 레지스터(312)에 저장된 데이터[
Figure 112008084485933-pat00050
(Mt-15)+Mt-16]는 선택기(324)를 거쳐 논리합 연산기(310)의 제2 입력단으로 입력된다.
클록 사이클(③)에서, 메모리(302)는 저장된 512 비트의 블록 데이터에서 (t-7)번째 서브 블록 데이터(Mt-7)를 선택기(320)로 출력한다. 메모리(302)에서 출력된 서브 블록 데이터(Mt-7)는 선택기(320)를 통해 논리합 연산기(310)의 제1 입력단으로 입력된다. 논리합 연산기(310)는 두 입력단으로 입력된 데이터[Mt-7,
Figure 112008084485933-pat00051
(Mt-15)+Mt-16]를 덧셈 연산하여 출력한다. 논리합 연산기(310)에서 출력된 데이터[Mt-7+
Figure 112008084485933-pat00052
(Mt-15)+Mt-16]는 선택기(322)를 거쳐서 레지스터(312)에 저장된다. 그리고 레지스터(312)에 저장된 데이터[Mt-7+
Figure 112008084485933-pat00053
(Mt-15)+Mt-16]는 선택기(324)를 거쳐 논리합 연산기(310)의 제2 입력단으로 입력된다.
마지막 클록 사이클(④)에서, 메모리(302)는 저장된 512 비트의 블록 데이터에서 (t-2)번째 서브 블록 데이터(Mt-2)를 로직 함수 연산기(306)로 출력한다. 로직 함수 연산부(306)는 서브 블록 데이터(Mt-2)에 대해 수학식 4에 해당하는 연산을 수행한 후 출력한다. 로직 함수 연산기(306)에서 출력된 데이터[
Figure 112008084485933-pat00054
(Mt-2)]는 선택기(320)를 거쳐 논리합 연산기(310)의 제1 입력단으로 입력된다. 논리합 연산기(310)는 두 입력단으로 입력된 데이터[
Figure 112008084485933-pat00055
(Mt-2), Mt-7+
Figure 112008084485933-pat00056
(Mt-15)+Mt-16]를 덧셈 연산하여 출력한다. 논리합 연산기(310)에서 출력된 데이터[
Figure 112008084485933-pat00057
(Mt-2)+Mt-7+
Figure 112008084485933-pat00058
(Mt-15)+Mt-16]는 선택기(322)를 통해 레지스터(312)에 저장된다. 또한, 레지스터(312)에 저장된 데이터[
Figure 112008084485933-pat00059
(Mt-2)+Mt-7+
Figure 112008084485933-pat00060
(Mt-15)+Mt-16]는 선택기(324, 326, 318)을 통해 메모리(302)에서 서브 블록 데이터의 위치(Mt-16)에 저장된다. 이와 같이, 마지막 클록 사이클(④)이 끝난 후에 레지스터(312)에 저장된 데이터[
Figure 112008084485933-pat00061
(Mt-2)+Mt-7+
Figure 112008084485933-pat00062
(Mt-15)+Mt-16]는 선택기(324)를 거쳐 메시지 압축부(400)로 출력되며, 선택기(324)에서 출력된 데이터[
Figure 112008084485933-pat00063
(Mt-2)+Mt-7+
Figure 112008084485933-pat00064
(Mt-15)+Mt-16]는 t 번째 라운드에서의 메시지 데이터(Wt)로 사용된다. 또한, 선택기(324)에서 출력된 데이터[
Figure 112008084485933-pat00065
(Mt-2)+Mt-7+
Figure 112008084485933-pat00066
(Mt-15)+Mt-16]는 선택기(326, 318)를 거쳐서 메모리(302)의 서브 블록 데이터의 위치(Mt-16)에 저장된다.
즉, 마지막 클록 사이클(④)이 끝나면, 한 라운드의 메시지 데이터(Wt)가 생성된다. 따라서, 메시지 스케줄러(300)는 17 라운드부터 64 라운드까지 매 라운드에서 단계(①-④)를 반복함으로써 17 라운드부터 64 라운드에서의 메시지 데이터(Wt)를 생성하여 메시지 압축부(400)로 출력하며, 생성된 메시지 데이터(Wt)들은 메모리(302)의 서브 블록 데이터의 위치(Mt-16)에 저장된다. 따라서, 메모리(302)의 액세스 주소는 연산할 라운드를 i라 할 때 (i mod 24)로 정의될 수 있다.
일반적으로, 수학식 1에 도시된 연산을 위해서는 도 4에 도시한 바와 같이, 메모리(41), 선택기(42), "Wt-3
Figure 112008084485933-pat00067
Wt-8
Figure 112008084485933-pat00068
Wt-14
Figure 112008084485933-pat00069
Wt-16"의 연산을 위한 3개의 배타적 논리합 연산기(431-423), "ROTLEFT1"의 연산을 수행하는 회전 시프트 연산기(44) 및 16개의 레지스터(451-4516)가 필요하다. 또한, 수학식 2에 도시된 연산을 위해서는 도 5에 도시한 바와 같이, "
Figure 112008084485933-pat00070
" 및 "
Figure 112008084485933-pat00071
"의 연산을 위한 2개의 로직 함수 연산기(511, 512), "
Figure 112008084485933-pat00072
(Wt-2)+Wt-7+
Figure 112008084485933-pat00073
(Wt-15)+Wt-16"의 연산을 위한 3개의 논리합 연산기(521-523) 및 16개의 레지스터(531-5316)가 필요하다. 그러나, 도 4 및 도 5와 같이 너무 많은 하드웨어 자원의 사용은 하드웨어 면적 및 소비 전력을 증가시키므로, 저면적 특성을 필요로 하는 모바일 폰이나 저전력 임베디드 시스템에 적용하기에는 어려움이 있다.
그러나, 본 발명의 실시 예에 따른 메시지 스케줄러(300)는 1개의 레지스터(312)와 1개의 논리합 연산기(310) 및 1개의 배타적 논리합 연산기(308)를 이용하여 SHA-1 및 SHA-256 해시 연산에 필요한 1-80/1-64 라운드의 메시지 데이터(Wt)를 생성함으로써, 하드웨어 면적 및 소비 전력이 최소화될 수 있다. 또한, 도 4와는 달리 본 발명의 실시 예에 따른 메시지 스케줄러(300)는 16 라운드 이후에도 메모리(302)를 사용함으로써, 메모리(302)의 활용도를 최대화할 수 있다.
다음으로, 본 발명의 실시 예에 따른 메시지 압축부의 하드웨어 구조에 대해 도 6 내지 도 8을 참고로 하여 자세하게 설명한다.
도 6은 본 발명의 실시 예에 따른 메시지 압축부의 하드웨어 구조를 나타낸 도면이다. 도 7 및 도 8은 각각 SHA-1 및 SHA-256에서의 메시지 다이제스트를 산출하기 위한 하드웨어 구조를 나타낸 도면이다.
도 6을 참조하면, 메시지 압축부(400)는 레지스터(401-408), 회전 시프트 연산기(411, 412), 로직 함수 연산기(413-417), 논리합 연산기(420), 저장 모듈(430) 및 선택기(441-448)을 포함한다. 도 6에서는 로직 함수 연산기(413-417)가 각각 수행할 로직 함수를 Maj, F, Ch,
Figure 112008084485933-pat00074
Figure 112008084485933-pat00075
로 도시하였으며, 회전 시프트 연산기(411, 412)가 수행할 연산을 각각 <<30 및 <<5로 도시하였다. 이때, "30"과 "5"는 회전 연산할 비트의 수를 나타낸다. 또한, 도 6에서 a, b, c, d, e, f, g 및 h는 각각 레지스터(401-408)에 저장된 값을 나타낸다.
레지스터(401-408)는 각각 입력단과 출력단을 가지며, 입력단으로 입력되는 데이터를 저장하고, 저장한 데이터를 출력단을 통해 출력한다. 이러한 레지스터(401-408)에는 SHA-1/SHA-256 해시 연산에 따라 메시지 다이제스트(Message Digest)가 산출되는 데 있어서 중간 값들이 저장된다.
회전 시프트 연산기(411/412)는 각각 입력단과 출력단을 가지며, 입력단으로 입력되는 데이터를 30/5 비트씩 왼쪽으로 이동시켜 출력단을 통해 출력한다. 즉, 회전 시프트 연산기(411/412)는 수학식 1의 "ROTLEFT30/ROTLEFT5"에 해당하는 연산을 수행한다.
로직 함수 연산기(413-415)는 각각 세 입력단과 출력단을 가지며, 각각 대응하는 로직 함수의 연산을 수행하여 출력단을 통해 출력한다. 즉, 로직 함수 연산기(413/414/415)는 세 입력단으로 입력되는 데이터에 대해 각각 "수학식 6의 Maj/수학식 6의 Ch/수학식 5의 f"에 해당하는 연산을 수행한다. 또한, 로직 함수 연산기(416, 417)는 입력단과 출력단을 가지며, 입력단으로 입력되는 데이터에 대해 수학식 10의
Figure 112009013658310-pat00076
/수학식 11의
Figure 112009013658310-pat00077
에 해당하는 연산을 수행하여 출력단으로 출력한다.
논리합 연산기(420)는 두 입력단과 출력단을 가지며, 두 입력단으로 입력되는 데이터를 덧셈 연산하여 출력단을 통해 출력한다.
저장 모듈(430)은 SHA-1 및 SHA-256 해시 연산에 사용되는 초기값(Initial Value)인 Hi 값과 라운드 상수 Kt를 저장하고 있다. 라운드 상수 Kt는 각 라운드마다 다른 값일 수 있다.
선택기(441-447)는 각각 두 입력단과 출력단을 가지며, 제어부(200)에서 결정한 SHA-1/SHA-256 해시 연산에 따라 두 입력단으로 입력되는 데이터 중 하나를 선택하여 출력단을 통해 출력한다. 또한, 선택기(448)는 7개의 입력단과 출력단을 가지며, 제어부(200)에서 결정한 SHA-1/SHA-256 해시 연산에 따라 7개의 입력단으로 입력되는 데이터 중 하나를 선택하여 출력단을 통해 출력한다.
구체적으로, 논리합 연산기(420)의 제1 및 제2 입력단은 각각 선택기(447, 448)의 출력단에 각각 연결되어 있고, 논리합 연산기(420)의 출력단은 레지스터(401) 및 선택기(442, 443, 444)의 제1 입력단에 연결되어 있다.
레지스터(401)의 출력단이 레지스터(402)의 입력단, 로직 함수 연산기(413)의 제1 입력단, 회전 연산기(412)의 입력단 및 로직 함수 연산기(416)의 입력단에 연결되어 있다. 레지스터(402)의 출력단이 선택기(441)의 제1 입력단, 회전 연산기(411)의 입력단, 로직 함수 연산기(413)의 제2 입력단 및 로직 함수 연산기(414)의 제1 입력단에 연결되어 있으며, 회전 연산기(411)의 출력단이 선택기(441)의 제2 입력단에 연결되어 있다.
선택기(441)의 출력단이 레지스터(403)의 입력단에 연결되어 있고, 레지스터(403)의 출력단이 선택기(442)의 제2 입력단, 로직 함수 연산기(414)의 제2 입력단 및 로직 함수 연산기(413)의 제3 입력단에 연결되어 있다.
선택기(442)의 출력단은 레지스터(404)의 입력단에 연결되어 있고, 레지스터(404)의 출력단은 선택기(443)의 제2 입력단, 로직 함수 연산기(414)의 제3 입력단 및 선택기(448)의 제3 입력단에 연결되어 있다.
선택기(443)의 출력단이 레지스터(405)의 입력단에 연결되어 있고, 레지스터(405)의 출력단이 레지스터(406)의 입력단, 로직 함수 연산기(415)의 제1 입력단, 선택기(447)의 제1 입력단 및 로직 함수 연산기(417)의 입력단에 연결되어 있다. 레지스터(406)의 출력단은 레지스터(407)의 입력단 및 로직 함수 연산기(415)의 제2 입력단에 연결되어 있고, 레지스터(407)의 출력단이 선택기(444)의 제2 입력단 및 로직 함수 연산기(415)의 제3 입력단에 연결되어 있으며, 로직 함수 연산기(415) 및 로직 함수 연산기(417)의 출력단이 각각 선택기(448)의 제1 및 제2 입력단에 연결되어 있다. 그리고 로직 함수 연산기(413, 414)의 출력단이 각각 선택기(445)의 제1 및 제2 입력단과 연결되어 있고, 회전 연산기(412) 및 로직 함수 연산기(416)의 출력단이 각각 선택기(446)의 제1 및 제2 입력단과 연결되어 있다.
선택기(444)의 출력단이 레지스터(408)의 입력단에 연결되어 있고, 레지스터(408)의 출력단이 선택기(447)의 제2 입력단에 연결되어 있다.
또한, 선택기(445, 446)의 출력단이 각각 선택기(448)의 제5 및 제6 입력단에 각각 연결되어 있고, 저장 모듈(430)이 선택기(448)의 제4 입력단에 연결되어 있으며, 선택기(448)의 제7 입력단으로는 중간 데이터(Wt)가 입력된다.
이러한 메시지 압축부(400)에서 SHA-1 해시 연산을 위한 단계별 세부 동작은 표 3과 같이 이루어진다. 표 3은 SHA-1 해시 연산을 위한 메시지 압축부(400)의 단계별 세부 동작을 나타내는 표이다. 표 3에서 "a-e"는 각각 레지스터(401-405)에 저장된 데이터를 나타낸다.
Figure 112008084485933-pat00078
제어부(200)로부터의 제어 신호에 따라서, 메시지 압축부(300)의 레지스터(401-405), 회전 시프트 연산기(412), 로직 함수 연산기(414), 논리합 연산기(420), 저장 모듈(430) 및 선택기(441-448)가 동작하여, SHA-1 해시 연산에 따른 메시지 다이제스트(Message Digest)를 산출한다.
먼저, 단계 2의 클록 사이클(①)에 앞서, SHA-1 해시 연산에서 정의하고 있는 초기값인 H0-H4를 레지스터(401-405)에 설정해야 한다(단계 1). 이러한 초기값(H0-H4)의 설정은 5 클록 사이클에 걸쳐 진행되며, 이를 위해 레지스터(401-405)는 시프트 레지스터로 동작하며, 선택기(441-443)는 각각 앞단의 레지스터(402-404)로부터 출력된 데이터를 뒷단의 레지스터(403-405)로 출력한다.
구체적으로, 단계 1의 클록 사이클(①)에서, 저장 모듈(430)은 H4를 출력한다. 저장 모듈(430)에서 출력된 H4는 선택기(448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력된다. 그리고 논리합 연산기(420)의 제2 입력단으로는 선택기(447)를 통해 레지스터(405)에 설정된 e가 입력된다. 이때, a, b, c, d 및 e는 0이므로, 논리합 연산기(420)의 출력 값은 H4가 되며, H4는 레지스터(401)에 저장된다(a=H4). 그리고 레지스터(401-404)에 저장된 값들은 레지스터(402-405)로 각각 한 단계씩 시프트되어 저장된다. 그러면, b, c, d 및 e는 각각 H4, 0, 0 및 0이 된다.
단계 1의 클록 사이클(②)에서, 저장 모듈(430)은 H3을 출력한다. 저장 모듈(430)에서 출력된 H3은 선택기(448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력된다. 그리고 논리합 연산기(420)의 제2 입력단으로는 선택기(447)를 통해 레지스터(405)에 설정된 e가 입력된다. 이때, e는 0이므로, 논리합 연산기(420)의 출력 값은 H3이 되며, H3은 레지스터(401)에 저장된다(a=H3). 그리고 레지스터(401-404)에 저장된 값들은 레지스터(402-405)로 각각 한 단계씩 시프트되어 저장된다. 그러면, b, c, d 및 e는 각각 H3, H4, 0 및 0으로 된다.
이와 동일한 방법으로 클록 사이클(⑤)이 모두 수행되고 나면, a, b, c, d 및 e는 각각 H0, H1, H2, H3 및 H4으로 된다.
이와 같이 하여 레지스터(401-405)에 초기값(H0-H4)이 설정되고 나면, 메시지 압축부(400)는 표 3에 도시된 단계 2의 동작을 수행한다.
표 3을 참조하면, 단계 2의 클록 사이클(①)에서, 저장 모듈(430)은 라운드 상수(Kt)를 출력한다. 저장 모듈(430)에서 출력된 Kt는 선택기(448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력된다. 논리합 연산기(420)는 제1 입력단으로 입력된 데이터(Kt)와 선택기(447)를 통해 제2 입력단으로 입력되는 레지스터(405)의 e를 덧셈 연산하여 출력한다. 논리합 연산기(420)에서 출력된 데이터(Kt+e)는 선택기(443)를 거쳐 레지스터(405)에 저장된다(e=Kt+e).
단계 2의 클록 사이클(②)에서, 회전 시프트 연산기(412)는 레지스터(401)의 a를 5비트씩 왼쪽으로 회전시킨 후 출력한다. 회전 연산기(412)에서 출력된 데이터[ROTLEFT5(a)]는 선택기(446, 448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력된다. 논리합 연산기(420)는 제1 입력단으로 입력된 데이터[ROTLEFT5(a)]와 선택기(447)를 통해 제2 입력단으로 입력되는 레지스터(405)의 e(=Kt+e)를 덧셈 연산하여 출력한다. 논리합 연산기(420)에서 출력된 데이터[ROTLEFT5(a)+Kt+e]는 선택기(443)를 거쳐 레지스터(405)에 저장된다[e=ROTLEFT5(a)+Kt+e].
단계 2의 클록 사이클(③)에서, 선택기(448)는 제7 입력단으로 입력되는 중간 데이터(Wt)를 출력한다. 그러면, 논리합 연산기(420)는 중간 데이터(Wt)와 선택기(447)를 통해 입력되는 레지스터(405)의 e[=ROTLEFT5(a)+Kt+e]를 덧셈 연산하여 출력한다. 논리합 연산기(420)에서 출력된 데이터[Wt+ROTLEFT5(a)+Kt+e]는 선택기(443)를 거쳐 레지스터(405)에 저장된다[e=Wt+ROTLEFT5(a)+Kt+e].
단계 2의 마지막 클록 사이클(④)에서, 로직 함수 연산기(414)는 레지스터 (402-404)의 b, c, d를 연산하여 출력한다. 로직 함수 연산기(414)에서 출력된 데이터[f(b, c, d)]는 선택기(445, 448)을 거쳐 논리합 연산기(420)의 제1 입력단으로 입력된다. 논리합 연산기(420)는 제1 입력단으로 입력된 데이터[f(b,c,d)]와 선택기(447)를 통해 제2 입력단으로 입력되는 레지스터(405)의 e[=Wt+ROTLEFT5(a)+Kt+e]를 덧셈 연산하여 출력한다. 논리합 연산기(420)에서 출력된 데이터[f(b,c,d)+Wt+ROTLEFT5(a)+Kt+e]는 레지스터(401)에 저장된다[a=f(b,c,d)+Wt+ROTLEFT5(a)+Kt+e]. 그리고 레지스터 (401-404)에 저장된 a, b, c, d 및 e는 각각 한 단계씩 시프트되어 저장된다.
이와 같이 4 클록 사이클(①-④)에 걸쳐 하나의 라운드에 대한 SHA-1 해시 연산이 완료되며, 전술한 4 클록 사이클(①-④)을 80 라운드까지 반복한다. 그러고 나면, 레지스터(401-405)에는 SHA-1 해시 연산의 중간값들이 저장된다. 이때, SHA-1 해시 연산의 메시지 다이제스트(Message Digest)를 산출하기 위해서는 80 라운드에 걸쳐 레지스터(401-405)에 저장된 값(a-e)들과 저장 모듈(430)에 저장된 초기값(H0-H4)을 덧셈 연산해야 한다. 따라서, 단계 3에서는 단계 1에서와 동일한 방법으로 5 클록 사이클에 걸쳐 레지스터(401-405)에 저장된 값들과 저장 모듈(430)에 저장된 초기값(H0-H4)을 각각 덧셈 연산한다.
그러면, 레지스터(401-405)에는 각각 a(=a+H0), b(=b+H1), c(=c+H2), d(=d+H3) 및 e(=e+H4)의 값들이 저장된다. 그리고 제어부(100)에서 연산이 끝났음을 알리는 인터럽트 신호나 폴링(polling) 신호가 발생되면 저장 모듈(430)에 저장되어 있는 초기값(H0-H4)이 레지스터(401-405)에 저장된 값[a(=a+H0), b(=b+H1), c(=c+H2), d(=d+H3), e(=e+H4)]들로 갱신된다.
메시지 압축부(400)는 SHA-1 해시 연산이 한 번만 수행하는 경우, 이렇게 갱신된 초기값[H0(=a), H1(=b), H2(=c), H3(=d), H4(=e)]들을 SHA-1 해시 연산의 출력값으로 시스템 버스(21)를 통해 시스템(10)으로 출력하고, SHA-1 해시 연산을 여러번 수행하는 경우, 512 비트의 연산 데이터에 대한 SHA-1 해시 연산의 초기값으로 사용하여 전술한 단계들을 80 라운드에 걸쳐 반복 수행한다. 이와 같이, SHA-1 해시 연산을 여러 번 수행하는 경우에는 2 번째 512 비트의 연산 데이터에 대해 SHA-1 해시 연산을 수행할 때 레지스터(401-405)에는 초기값[H0(=a), H1(=b), H2(=c), H3(=d), H4(=e)]들이 저장되어 있으므로, 단계 1 없이 바로 단계 2를 수행할 수 있다.
또한, 메시지 압축부(400)에서 SHA-256 해시 연산을 위한 단계별 세부 동작은 표 4과 같이 이루어진다. 표 4은 SHA-256 해시 연산을 위한 메시지 압축부(400)의 단계별 세부 동작을 나타내는 표이다.
Figure 112008084485933-pat00079
제어부(200)로부터의 제어 신호에 따라서, 메시지 압축부(300)의 레지스터(401-408), 로직 함수 연산기(413, 415-417), 논리합 연산기(420), 저장 모듈(430) 및 선택기(441-448)가 동작하여, SHA-256 해시 연산에 따른 메시지 다이제스트(Message Digest)를 산출한다.
앞서 설명한 SHA-1 해시 연산에서와 마찬가지로, SHA-256 해시 연산에서도 단계 2의 클록 사이클(①)에 앞서, SHA-256 해시 연산에서 정의하고 있는 초기값인 H0-H7을 레지스터(401-408)에 설정해야 한다(단계 1). 이러한 초기값(H0-H7)의 설정은 8 클록 사이클에 걸쳐 진행되며, 이를 위해 레지스터(401-408)는 시프트 레지스터로 동작하며, 선택기(441-444)는 각각 앞단의 레지스터(402-404, 407)로부터 출력된 데이터를 뒷단의 레지스터(403-405, 408)로 출력한다.
구체적으로, 단계 1의 클록 사이클(①)에서, 저장 모듈(430)은 초기값(H7)을 출력한다. 저장 모듈(430)에서 출력된 H7은 선택기(448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력된다. 그리고 논리합 연산기(420)의 제2 입력단으로는 선택기(447)를 통해 레지스터(408)에 설정된 h가 입력된다. 이때, a, b, c, d, e, f, g 및 h는 0이므로, 논리합 연산기(420)의 출력 값은 H7이 되며, H7은 레지스터(401)에 저장된다(a=H7). 그리고 레지스터(401-407)에 저장된 값들은 레지스터(402-408)로 각각 한 단계씩 시프트되어 저장된다. 그러면, b, c, d, e, f, g 및 h는 각각 H7, 0, …, 0이 된다.
단계 1의 클록 사이클(②)에서, 저장 모듈(430)은 H6을 출력한다. 저장 모듈(430)에서 출력된 H6은 선택기(448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력된다. 그리고 논리합 연산기(420)의 제2 입력단으로는 선택기(447)를 통해 레지스터(408)에 설정된 h가 입력된다. 이때, h는 0이므로, 논리합 연산기(420)의 출력 값은 H6이 되며, H6은 레지스터(401)에 저장된다. 그리고 레지스터(401-407)에 저장된 값들은 레지스터(402-408)로 각각 한 단계씩 시프트되어 저장된다. 그러면, b, c, d, e, f, g 및 h는 각각 H6, H7, 0, …, 0의 값으로 설정된다.
이와 동일한 방법으로, 단계 1의 클록 사이클(③-⑧)에서 각각 저장 모듈(430)은 H5-H0을 출력하며, 클록 사이클(⑧)이 모두 수행되고 나면, a, b, c, d, e, f, g 및 h는 각각 H0, H1, H2, H3, H4, H5, H6 및 H7이 된다.
이와 같이 하여 레지스터(401-408)에 초기값(H0-H7)이 모두 설정되고 나면, 메시지 압축부(400)는 표 4에 도시된 단계 2의 동작을 수행한다.
표 4를 참조하면, 단계 2의 클록 사이클(①)에서, 로직 함수 연산기(415)는 레지스터(405-407)에 저장된 데이터(e, f, g)에 대해 수학식 7에 해당하는 로직 함수의 연산을 수행하여 출력한다. 로직 함수 연산기(415)에서 출력되는 데이터[Ch(e,f,g)]는 선택기(448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력되고, 레지스터 h(408)에 저장된 h가 선택기(447)를 거쳐 논리합 연산기(420)의 제2 입력단으로 입력된다. 논리합 연산기(420)는 제1 및 제2 입력단으로 입력되는 데이터[Ch(e,f,g), h]를 덧셈 연산하여 출력한다. 논리합 연산기(420)에서 출력되는 데이터[Ch(e,f,g)+h]는 선택기(444)를 거쳐 레지스터(408)에 저장된다[h=Ch(e,f,g)+h].
클록 사이클(②)에서, 저장 모듈(430)은 라운드 상수(Kt)를 출력한다. 저장 모듈(430)에서 출력된 Kt는 선택기(448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력되고, 레지스터(408)에 저장된 h[=Ch(e,f,g)+h]가 선택기(447)를 거쳐 논리합 연산기(420)의 제2 입력단으로 입력된다. 논리합 연산기(420)는 제1 및 제2 입력단으로 입력되는 데이터[Kt, Ch(e,f,g)+h]를 덧셈 연산하여 출력한다. 논리합 연산기(420)에서 출력되는 데이터[Kt+Ch(e,f,g)+h]는 선택기(444)를 거쳐 레지스터(408)에 저장된다[h=Kt+Ch(e,f,g)+h].
클록 사이클(③)에서, 로직 함수 연산기(417)는 레지스터(405)에 저장된 e에 대해 수학식 11에 해당하는 로직 함수의 연산을 수행하여 출력한다. 로직 함수 연산기(417)에서 출력되는 데이터[
Figure 112008084485933-pat00080
(e)]는 선택기(448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력되고, 레지스터(408)에 저장된 h[=Kt+Ch(e,f,g)+h]가 선택기(447)를 거쳐 논리합 연산기(420)의 제2 입력단으로 입력된다. 논리합 연산기(420)는 제1 및 제2 입력단으로 입력되는 데이터[
Figure 112008084485933-pat00081
(e), Kt+Ch(e,f,g)+h]를 덧셈 연산하여 출력한다. 논리합 연산기(420)에서 출력되는 데이터[
Figure 112008084485933-pat00082
(e)+Kt+Ch(e,f,g)+h]는 선택기(444)를 거쳐 레지스터(408)에 저장된다[h=
Figure 112008084485933-pat00083
(e)+Kt+Ch(e,f,g)+h].
클록 사이클(④)에서, 선택기(448)는 중간 데이터(Wt)를 출력한다. 선택기에서 출력되는 데이터(Wt)는 선택기(448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력되고, 레지스터(408)에 저장된 h[=
Figure 112008084485933-pat00084
(e)+Kt+Ch(e,f,g)+h]는 선택기(447)를 거쳐 논리합 연산기(420)의 제2 입력단으로 입력된다. 논리합 연산기(420)는 제1 및 제2 입력단으로 입력되는 데이터[Wt,
Figure 112008084485933-pat00085
(e)+Kt+Ch(e,f,g)+h]를 덧셈 연산하여 출력한다. 논리합 연산기(420)에서 출력되는 데이터[Wt+
Figure 112008084485933-pat00086
(e)+Kt+Ch(e,f,g)+h]는 선택기(444)를 거쳐 레지스터(408)에 저장된다[h=Wt+
Figure 112008084485933-pat00087
(e)+Kt+Ch(e,f,g)+h]. 본 발명의 실시 예에 따른 메시지 압축부(400)는 메시지 스케줄러(300)에서 중간 데이터(Wt)를 생성하는 데 필요한 시간을 고려하여 중간 데이터(Wt)를 네 번째 클록 사이클 이후(④~)에 논리합 연산기(420)로 출력한다. 즉, 메시지 스케줄러(300)에서 중간 데이터(Wt)를 생성하기 위해서는 4 클록 사이클이 필요하다. 표 4를 참조하면 메시지 압축부(400)에서 SHA-256 해시 연산을 수행하기 위해서는 7 클록 사이클이 필요하므로, 이는 메시지 스케줄러(300)에서 중간 데이터(Wt)를 계산하는 데 충분한 시간이 될 수 있다. 따라서, 네 번째 클록 사이클(④) 이후에서 중간 데이터(Wt)를 논리합 연산기(420)로 출력하면, 메시지 스케줄러(300)에서 중간 데이터(Wt)를 생성하기 위한 별도의 시간이 필요하지 않게 된다.
클록 사이클(⑤)에서, 레지스터(404)에 저장된 d가 선택기(448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력되고, 레지스터(408)에 저장된 h[=Wt+
Figure 112008084485933-pat00088
(e)+Kt+Ch(e,f,g)+h]가 선택기(447)를 거쳐 논리합 연산기(420)의 제2 입력단으로 입력된다. 논리합 연산기(420)는 제1 및 제2 입력단으로 입력되는 데이터[H3, Wt+
Figure 112008084485933-pat00089
(e)+Kt+Ch(e,f,g)+h]를 덧셈 연산하여 출력한다. 논리합 연산기(420)에서 출력되는 데이터[d+Wt+
Figure 112008084485933-pat00090
(e)+Kt+Ch(e,f,g)+h]는 선택기(442)를 거쳐 레지스터(404)에 저장된다[d=d+Wt+
Figure 112008084485933-pat00091
(e)+Kt+Ch(e,f,g)+h]. 이와 같이 하여, 다섯 번째 클록 사이클이 끝나면, 레지스터(404)에는 수학식 6에서 "e=d+T1"을 위한 값이 저장된다.
클록 사이클(⑥)에서, 로직 함수 연산기(413)는 레지스터(401-403)에 저장된 데이터(a, b, c)에 대해 수학식 9에 해당하는 로직 함수의 연산을 수행하여 출력한다. 로직 함수 연산기(413)에서 출력된 데이터[Maj(a,b,c)]는 선택기(445, 448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력되고, 레지스터(408)에 저장된 e[=Wt+
Figure 112008084485933-pat00092
(e)+Kt+Ch(e,f,g)+h]가 선택기(447)를 거쳐 논리합 연산기(420)의 제2 입력단으로 입력된다. 논리합 연산기(420)는 제1 및 제2 입력단으로 입력되는 데이터[Maj(a,b,c), Wt+
Figure 112008084485933-pat00093
(e)+Kt+Ch(e,f,g)+h]를 덧셈 연산하여 출력한다. 논리합 연산기(420)에서 출력되는 데이터[Maj(a,b,c)+Wt+
Figure 112008084485933-pat00094
(e)+Kt+Ch(e,f,g)+h]는 선택기(442)를 거쳐 레지스터(408)에 저장된다[h=Maj(a,b,c)+Wt+
Figure 112008084485933-pat00095
(e)+Kt+Ch(e,f,g)+h].
마지막으로, 클록 사이클(⑦)에서, 로직 함수 연산기(416)는 레지스터(401)에 저장된 a에 대해 수학식 9에 해당하는 로직 함수의 연산을 수행하여 출력한다. 로직 함수 연산기(416)에서 출력되는 데이터[
Figure 112008084485933-pat00096
(a)]는 선택기(446, 448)를 거쳐 논리합 연산기(420)의 제1 입력단으로 입력되고, 레지스터(408)에 저장된 h[=Maj(a,b,c)+Wt+
Figure 112008084485933-pat00097
(e)+Kt+Ch(e,f,g)+h]가 선택기(447)를 거쳐 논리합 연산기(420)의 제2 입력단으로 입력된다. 논리합 연산기(420)는 제1 및 제2 입력단으로 입력되는 데이터[
Figure 112008084485933-pat00098
(a), Maj(a,b,c)+Wt+
Figure 112008084485933-pat00099
(e)+Kt+Ch(e,f,g)+H7]를 덧셈 연산하여 출력한다. 논리합 연산기(420)에서 출력되는 데이터[
Figure 112008084485933-pat00100
(a)+Maj(a,b,c)+Wt+
Figure 112008084485933-pat00101
(e)+Kt+Ch(e,f,g)+h]는 레지스터(401)에 저장된다[h=
Figure 112008084485933-pat00102
(a)+Maj(a,b,c)+Wt+
Figure 112008084485933-pat00103
(e)+Kt+Ch(e,f,g)+h]. 그리고 레지스터(401-407)에 저장된 데이터들은 각각 한 단계씩 시프트되어 레지스터(402-408)에 저장된다. 즉, 클록 사이클(⑤)에서 레지스터(404)에는 "H3+Wt+
Figure 112008084485933-pat00104
(e)+Kt+Ch(e,f,g)+h"가 저장되어 있으므로, 이 데이터[H3+Wt+
Figure 112008084485933-pat00105
(e)+Kt+Ch(e,f,g)+h]는 레지스터(405)에 저장된다.
이와 같이 7 클록 사이클(①-⑦)에 거쳐 하나의 라운드에 대한 SHA-256 해시 연산이 완료되며, 전술한 7 클록 사이클(①-⑦)을 64 라운드까지 반복한다. 그러고 나면, 레지스터(401-408)에는 SHA-256 해시 연산의 중간값들이 저장된다. 이때, SHA-256 해시 연산의 메시지 다이제스트(Message Digest)를 산출하기 위해서는 64 라운드에 걸쳐 레지스터(401-408)에 저장된 값(a-h)들과 저장 모듈(430)에 저장된 초기값(H0-H7)을 덧셈 연산해야 한다. 따라서, 단계 3에서는 단계 1에서와 동일한 방법으로 8 클록 사이클에 걸쳐 레지스터(401-408)에 저장된 값들과 저장 모듈(430)에 저장된 초기값(H0-H7)을 각각 덧셈 연산한다.
그러면, 레지스터(401-408)에는 각각 a(=a+H0), b(=b+H1), c(=c+H2), d(=d+H3), e(=e+H4), f(=f+H5), g(=g+H6) 및 h(=h+H7)의 값들이 저장된다. 그리고 제어부(100)에서 연산이 끝났음을 알리는 인터럽트 신호나 폴링 신호가 발생되면 저장 모듈(430)에 저장되어 있는 초기값(H0-H7)이 레지스터(401-408)에 저장된 값[a(=a+H0), b(=b+H1), c(=c+H2), d(=d+H3), e(=e+H4), f(=f+H5), g(=g+H6), h(=h+H7)]들로 갱신된다.
메시지 압축부(400)는 SHA-256 해시 연산이 한 번만 수행하는 경우, 이렇게 갱신된 초기값[a(=a+H0), b(=b+H1), c(=c+H2), d(=d+H3), e(=e+H4), f(=f+H5), g(=g+H6), h(=h+H7)]들을 SHA-256 해시 연산의 출력값으로 시스템 버스(21)를 통해 시스템(10)으로 출력하고, SHA-256 해시 연산을 여러번 수행하는 경우, 512 비트의 연산 데이터에 대한 SHA-256 해시 연산의 초기값으로 사용하여 전술한 단계들을 64라운드에 걸쳐 반복 수행한다. SHA-256 해시 연산을 여러 번 수행하는 경우에는 2 번째 512 비트의 연산 데이터부터는 SHA-1 해시 연산을 수행할 때 레지스터(401-408)에는 초기값[a(=a+H0), b(=b+H1), c(=c+H2), d(=d+H3), e(=e+H4), f(=f+H5), g(=g+H6), h(=h+H7)]들이 저장되어 있으므로, 단계 1 없이 바로 단계 2를 수행할 수 있다.
일반적으로, 수학식 5에 도시된 연산을 위해서는 도 7에 도시한 바와 같이, a, b, c, d 및 e를 각각 저장하고 있는 레지스터(711-715), "ROTLEFT5" 및 "ROTLEFT5" 연산을 위한 회전 시프트 연산기(72, 73), "ft"의 연산을 위한 로직 연산기(74) 및 "ft(bt-1,ct-1,dt-1)+et-1+ROTLEFT5(at-1)+Wt+Kt)"의 연산을 위한 4개의 논리합 연산기(751-754)가 필요하다. 또한, 수학식 6에 도시된 연산을 위해서는 도 8에 도시한 바와 같이, a, b, c, d, e, f, g 및 h를 각각 저장하고 있는 레지스터(811-818), "
Figure 112008084485933-pat00106
", "Maj", "
Figure 112008084485933-pat00107
" 및 "Ch" 연산을 위한 로직 연산기(82-85) 및 "T1=h+
Figure 112008084485933-pat00108
(e)+Ch(e,f,g)+Kt+Wt" 및 "T2=
Figure 112008084485933-pat00109
(a)+Maj(a,b,c)"의 연산을 위한 6개의 논리합 연산기(861-866)가 필요하다. 그러나, 도 7 및 도 8과 같이 너무 많은 하드웨어 자원의 사용은 하드웨어 면적 및 소비 전력을 증가시키므로, 저면적 특성을 필요로 하는 모바일 폰이나 저전력 임베디드 시스템에 적용하기에는 어려움이 있다.
그러나, 본 발명의 실시 예에 따른 메시지 압축부(400)는 시프트 레지스터로 동작하는 8개의 레지스터(401-408) 및 1개 논리합 연산기(420)를 이용하여 최종적으로 하나의 메시지 다이제스트(Message Digest)를 산출하므로, 하드웨어 면적 및 소비 전력이 최소화시킬 수 있다.
본 발명의 실시 예는 이상에서 설명한 장치 및/또는 방법을 통해서만 구현되는 것은 아니며, 본 발명의 실시 예의 구성에 대응하는 기능을 실현하는 프로그램 또는 그 프로그램이 기록된 기록 매체를 통해 구현될 수도 있으며, 이러한 구현은 앞서 설명한 실시 예의 기재로부터 본 발명이 속하는 기술 분야의 전문가라면 쉽게 구현할 수 있는 것이다.
이상에서 본 발명의 실시 예에 대하여 상세하게 설명하였지만 본 발명의 권리 범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리 범위에 속하는 것이다.
도 1은 본 발명의 실시 예에 따른 해시 암호 장치를 나타낸 블록도이고,
도 2는 도 1에 도시한 제어부를 나타낸 블록도이고,
도 3은 본 발명의 실시 예에 따른 메시지 스케줄러의 하드웨어 구조를 나타낸 도면이고,
도 4 및 도 5은 각각 SHA-1 및 SHA-256에서의 메시지 데이터를 생성하기 위한 하드웨어 구조를 나타낸 도면이고,
도 6은 본 발명의 실시 예에 따른 메시지 압축부의 하드웨어 구조를 나타낸 도면이고,
도 7 및 도 8은 각각 SHA-1 및 SHA-256에서의 메시지 다이제스트를 산출하기 위한 하드웨어 구조를 나타낸 도면이다.

Claims (25)

  1. 제1 해시 연산 시에 복수의 제1 메시지 데이터를 생성하고, 제2 해시 연산 시에 복수의 제2 메시지 데이터를 생성하는 메시지 스케줄러,
    상기 제1 해시 연산 시에 상기 복수의 제2 메시지 데이터를 이용하여 연산 데이터에 대해 상기 제1 해시 연산을 수행하여 제1 메시지 다이제스트를 산출하고, 상기 제2 해시 연산 시에 상기 복수의 제2 메시지 데이터를 이용하여 상기 연산 데이터에 대해 상기 제2 해시 연산을 수행하여 제2 메시지 다이제스트를 산출하는 메시지 압축부, 그리고
    외부로부터 수신되는 제어 명령으로부터 상기 제1 및 제2 해시 연산 중 상기 연산 데이터에 수행할 해시 연산을 결정하고, 상기 연산 데이터의 길이에 따라 결정한 상기 해시 연산을 수행할 횟수를 결정하며, 결정한 상기 해시 연산과 상기 횟수에 따라서 상기 메시지 스케줄러 및 상기 메시지 압축부를 제어하는 제어부
    를 포함하며,
    상기 제1 해시 연산은 SHA(Secure Hash Algorithm)-1이고, 상기 제2 해시 연산은 SHA-256인 해시 암호 장치.
  2. 삭제
  3. 제1항에 있어서,
    상기 메시지 스케줄러는,
    상기 제1 해시 연산 시에 N개의 제1 메시지 데이터를 입력받아 저장하며, 상기 제2 해시 연산 시에 N개의 제2 메시지 데이터를 입력받아 저장하는 메모리,
    상기 제1 해시 연산 시에 입력되는 데이터를 저장한 후 출력하며, 상기 제2 해시 연산 시에 입력되는 데이터를 저장한 후 출력하는 레지스터,
    상기 메모리에 저장된 제1 메시지 데이터와 상기 레지스터에 저장된 데이터를 기초로 제1 로직 연산을 수행하여 추가적인 제1 메시지 데이터를 생성하는 제1 로직 연산부, 그리고
    상기 메모리에 저장된 제2 메시지 데이터와 상기 레지스터에 저장된 데이터를 기초로 제2 로직 연산을 수행하여 추가적인 제2 메시지 데이터를 생성하는 제2 로직 연산부
    를 포함하며,
    상기 제어부는, 상기 제1 해시 연산 시에 상기 제1 로직 연산부에 의해 추가적으로 생성되는 상기 제1 메시지 데이터를 상기 메모리에 저장하며, 상기 추가적인 제1 메시지 데이터를 M개 생성할 때까지 상기 제1 로직 연산을 반복하고,
    상기 제2 해시 연산 시에 상기 제2 로직 연산부에 의해 추가적으로 생성되는 상기 제2 메시지 데이터를 상기 메모리에 저장하며, 상기 추가적인 제2 메시지 데이터를 L개 생성할 때까지 상기 제2 로직 연산을 반복하며,
    상기 N, M 및 K는 양의 정수인 해시 암호 장치.
  4. 제3항에 있어서,
    상기 제1 로직 연산부는,
    상기 메모리에서 저장된 제1 메시지 데이터 중 어느 하나와 상기 레지스터에 저장된 데이터를 배타적 논리합 연산하여 상기 레지스터의 데이터를 갱신하는 배타적 논리합 연산기, 그리고
    상기 배타적 논리합 연산기에 의해 상기 배타적 논리합 연산이 소정 횟수만큼 반복된 후에 상기 레지스터에 저장된 데이터를 회전 시프트하여 상기 추가적인 제1 메시지 데이터로 출력하는 회전 시프트 연산기
    를 포함하며,
    상기 배타적 논리합 연산 전에 상기 메모리에서 저장된 제1 메시지 데이터 중 어느 하나를 상기 레지스터에 저장하는 해시 암호 장치.
  5. 제3항에 있어서,
    상기 제2 로직 연산부는,
    상기 메모리에 저장된 제2 메시지 데이터 중 어느 하나에 대해서 복수의 제3 로직 연산 중 대응하는 제3 로직 연산을 수행하여 출력하는 제3 로직 연산기, 그리고
    상기 제3 로직 연산기에서 출력되는 데이터와 상기 레지스터에 저장된 데이터를 논리합 연산하여 상기 레지스터의 데이터를 갱신하는 논리합 연산기,
    를 포함하며,
    소정 개수의 제2 메시지 데이터에 대해서 상기 제3 로직 연산과 상기 논리합 연산을 반복한 후 상기 논리합 연산에 따른 데이터를 상기 추가적인 제2 메시지 데이터로 출력하며,
    최초의 상기 제3 로직 연산 전에 상기 메모리에 저장된 제2 메시지 데이터 중 어느 하나를 상기 레지스터에 저장하는 해시 암호 장치.
  6. 제5항에 있어서,
    상기 복수의 제3 로직 연산은,
    입력 데이터에 대해서 회전과 시프트를 제1 형태로 수행하는 로직 연산,
    입력 데이터에 대해서 회전과 시프트를 상기 제1 형태와 다른 제2 형태로 수행하는 로직 연산, 그리고
    입력 데이터를 그대로 출력하는 로직 연산을 포함하는 해시 암호 장치.
  7. 제3항에 있어서,
    상기 N개의 제1 메시지 데이터와 상기 N개의 제2 메시지 데이터는 동일한 해시 암호 장치.
  8. 제1항에 있어서,
    상기 메시지 압축부는,
    입력되는 데이터를 저장한 후 출력하며, 앞단의 레지스터로부터 출력되는 데이터가 뒷단의 레지스터로 입력되는 구조로 연결되어 있는 복수의 레지스터,
    상기 제1 해시 연산에 사용하는 복수의 제1 라운드 상수와 상기 제2 해시 연산에 사용하는 복수의 제2 라운드 상수를 저장하고 있으며, 상기 복수의 제1 및 제2 라운드 상수 중 대응하는 라운드의 제1 및 제2 라운드 상수를 출력하는 저장 모듈,
    상기 복수의 레지스터에 저장된 데이터 중 적어도 하나를 이용하여 상기 제1 해시 연산에 필요한 로직 연산을 수행하는 복수의 제1 연산기,
    상기 복수의 레지스터에 저장된 데이터 중 적어도 하나를 이용하여 상기 제2 해시 연산에 필요한 로직 연산을 수행하는 복수의 제2 연산기,
    상기 제1 해시 연산 시에 상기 저장 모듈에서 출력되는 제1 라운드 상수, 상기 복수의 제1 연산기로부터 출력되는 데이터 및 상기 메시지 스케줄러로부터 출력되는 제1 메시지 데이터 중에서 선택되는 하나의 제1 데이터와 상기 복수의 레지스터 중 제1 레지스터에 저장된 데이터를 논리합 연산하여 상기 제1 레지스터의 데이터를 갱신하고, 상기 제2 해시 연산 시에 상기 저장 모듈에서 출력되는 제2 라운드 상수, 상기 복수의 제2 연산기로부터 출력되는 데이터 및 상기 메시지 스케줄러로부터 출력되는 제2 메시지 데이터 중에서 선택되는 하나의 제2 데이터와 상기 복수의 레지스터 중 제2 레지스터에 저장된 데이터를 논리합 연산하여 상기 제2 레지스터의 데이터를 갱신하는 논리합 연산기
    를 포함하며,
    상기 제어부는 상기 제1 해시 연산 시에 상기 제1 데이터의 선택을 달리하면서 상기 논리합 연산을 제1 횟수만큼 반복한 후 상기 논리합 연산기로부터 출력되는 데이터를 상기 복수의 레지스터 중 맨 앞에 위치한 제3 레지스터에 저장하고 상기 복수의 레지스터를 시프트 레지스터로 동작시키는 제1 라운드 연산을 수행하고,
    상기 제2 해시 연산 시에 상기 제2 데이터의 선택을 달리하면서 상기 논리합 연산을 제2 횟수만큼 반복한 후 상기 논리합 연산기로부터 출력되는 데이터를 상기 제3 레지스터에 저장하고 상기 복수의 레지스터를 시프트 레지스터로 동작시키는 제2 라운드 연산을 수행하는 해시 암호 장치.
  9. 제8항에 있어서,
    상기 제어부는,
    상기 제1 해시 연산 시에 해당 라운드의 상기 제1 라운드 상수와 상기 제1 메시지 데이터를 선택하면서 상기 제1 라운드 연산을 설정된 라운드의 횟수만큼 반복시키고,
    상기 제2 해시 연산 시에 해당 라운드의 상기 제2 라운드 상수와 상기 제2 메시지 데이터를 선택하면서 상기 제2 라운드 연산을 설정된 라운드의 횟수만큼 반복시키는 해시 암호 장치.
  10. 제9항에 있어서,
    상기 저장 모듈에는 복수의 제1 초기값과 복수의 제2 초기값을 저장하고 있으며,
    상기 메시지 압축부는,
    상기 제1 해시 연산 시, 상기 제1 라운드 연산이 상기 설정된 라운드의 횟수만큼 반복된 후, 상기 복수의 레지스터 중 상기 제3 레지스터부터 상기 제1 레지스터까지 저장된 복수의 데이터를 이용하여 상기 복수의 제1 초기값을 갱신하고,
    상기 제2 해시 연산시, 상기 제2 라운드 연산이 상기 설정된 라운드의 횟수만큼 반복된 후, 상기 복수의 레지스터 중 상기 제3 레지스터부터 상기 제2 레지스터까지 저장된 복수의 데이터를 이용하여 상기 복수의 제2 초기값을 갱신하며,
    갱신한 상기 제1 및 제2 초기값이 각각 상기 제1 및 제2 해시 연산의 메시지 다이제스트로 사용되는 해시 암호 장치.
  11. 제10항에 있어서,
    상기 제어부는,
    상기 해당 라운드의 라운드 정보를 저장하고 있는 제1 카운터, 그리고
    상기 해당 라운드에서 상기 논리합 연산을 반복하는 횟수에 대응하는 클록 사이클 정보를 저장하고 있는 제2 카운터를 포함하며,
    상기 라운드 정보와 상기 클록 사이클 정보를 기초로 하여 상기 해시 연산의 종료를 알리는 제어 신호를 생성하여 상기 메시지 압축부로 출력하는 해시 암호 장치.
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 외부로부터 수신되는 연산 데이터를 N개의 블록 데이터로 나누어 메모리에 저장하는 단계,
    상기 N개의 블록 데이터를 레지스터에 저장하는 단계,
    제1 해시 연산 시 상기 레지스터에 저장한 N개의 블록 데이터를 1부터 N번째 라운드에서 사용할 제1 메시지 데이터로 생성하는 단계,
    상기 제1 해시 연산 시 (N+1)부터 M번째 라운드의 각 라운드에서, 상기 제1 메시지 데이터와 상기 레지스터에 저장된 데이터를 기초로 하나의 배타적 논리합 연산기를 이용하여 설정된 횟수만큼 배타적 논리합 연산을 수행하여 해당하는 라운드의 제1 메시지 데이터를 생성하는 단계,
    제2 해시 연산 시 상기 레지스터에 저장한 N개의 블록 데이터를 1부터 N번째 라운드에서 사용할 제2 메시지 데이터로 생성하는 단계,
    상기 제2 해시 연산 시 (N+1)부터 K번째 라운드의 각 라운드에서, 상기 제2 메시지 데이터와 상기 레지스터에 저장된 데이터를 기초로 하나의 논리합 연산기를 이용하여 설정된 횟수만큼 논리합 연산을 수행하여 해당하는 라운드의 제2 메시지 데이터를 생성하는 단계,
    상기 제1 해시 연산 시에 상기 1부터 M번째 라운드에 대응하는 M개의 제1 메시지 데이터를 이용하여 제1 메시지 다이제스트를 산출하는 단계, 그리고
    상기 제2 해시 연산 시에 상기 1부터 K번째 라운드에 대응하는 제2 메시지 데이터를 이용하여 제2 메시지 다이제스트를 산출하는 단계
    를 포함하며,
    상기 N, M 및 K는 양의 정수이며,
    상기 제1 해시 연산은 SHA(Secure Hash Algorithm)-1이고, 상기 제2 해시 연산은 SHA-256인 해시 암호 방법.
  21. 삭제
  22. 제20항에 있어서,
    상기 (N+1)부터 M번째 라운드의 제1 메시지 데이터를 상기 메모리에 저장하는 단계, 그리고
    상기 (N+1)부터 K번째 라운드의 제2 메시지 데이터를 상기 메모리에 저장하는 단계를 더 포함하는 해시 암호 방법.
  23. 제20항에 있어서,
    상기 제1 메시지 다이제스트를 산출하는 단계는,
    입력되는 복수의 제1 데이터 중에서 선택되는 하나의 제1 데이터와 상기 제1 해시 연산 시 동작하는 복수의 제1 레지스터 중 맨 마지막에 위치하는 제2 레지스터에 저장된 데이터를 다른 하나의 논리합 연산기를 이용하여 논리합 연산하여 상기 제1 레지스터의 데이터를 갱신하는 단계,
    상기 제1 데이터의 선택을 달리하면서 상기 논리합 연산을 설정된 횟수만큼 반복한 후 상기 복수의 제1 레지스터 중 맨 앞에 위치한 제3 레지스터에 저장한 후 상기 복수의 제1 레지스터의 데이터를 시프트하는 단계, 그리고
    1부터 M라운드까지 해당 라운드의 라운드 상수와 제1 메시지 데이터를 선택하면서 상기 갱신하는 단계와 상기 시프트하는 단계를 반복하여 상기 복수의 제1 레지스터에 저장된 데이터와 복수의 제1 초기값을 이용하여 상기 제1 메시지 다이제스트를 산출하는 단계를 포함하며,
    상기 제2 메시지 다이제스트를 산출하는 단계는,
    입력되는 복수의 제2 데이터 중에서 선택되는 하나의 제2 데이터와 상기 제2 해시 연산 시 동작하는 복수의 제4 레지스터 중 맨 마지막에 위치하는 제5 레지스터에 저장된 데이터를 상기 다른 하나의 논리합 연산기를 이용하여 논리합 연산하여 상기 제5 레지스터의 데이터를 갱신하는 단계,
    상기 제2 데이터의 선택을 달리하면서 상기 논리합 연산을 설정된 횟수만큼 반복한 후 상기 복수의 제4 레지스터 중 맨 앞에 위치한 제6 레지스터에 저장한 후 상기 복수의 제4 레지스터의 데이터를 시프트하는 단계, 그리고
    1부터 K라운드까지 해당 라운드의 라운드 상수와 제2 메시지 데이터를 선택하면서 상기 갱신하는 단계와 상기 시프트하는 단계를 반복하여 상기 복수의 제4 레지스터에 저장된 데이터와 복수의 제2 초기값을 이용하여 상기 제2 메시지 다이제스트를 산출하는 단계를 포함하는 해시 암호 방법.
  24. 제23항에 있어서,
    상기 복수의 제1 레지스터는 상기 복수의 제4 레지스터의 일부이며,
    상기 제3 레지스터와 상기 제6 레지스터는 동일한 레지스터인 해시 암호 방법.
  25. 제23항에 있어서,
    상기 제1 메시지 다이제스트를 산출하는 단계는,
    상기 제1 레지스터의 데이터를 갱신하는 단계 이전에, 상기 복수의 제1 레지스터에 상기 복수의 제1 초기값을 설정하는 단계를 더 포함하며,
    상기 제2 메시지 다이제스트를 산출하는 단계는,
    상기 제2 레지스터의 데이터를 갱신하는 단계 이전에, 상기 복수의 제4 레지스터에 상기 복수의 제2 초기값을 설정하는 단계를 더 포함하는 해시 암호 방법.
KR1020080124199A 2008-12-08 2008-12-08 해시 암호 장치 및 방법 KR101210607B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020080124199A KR101210607B1 (ko) 2008-12-08 2008-12-08 해시 암호 장치 및 방법
US12/567,006 US8275126B2 (en) 2008-12-08 2009-09-25 Apparatus and method for hash cryptography
JP2009278269A JP5143817B2 (ja) 2008-12-08 2009-12-08 ハッシュ暗号装置及び方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020080124199A KR101210607B1 (ko) 2008-12-08 2008-12-08 해시 암호 장치 및 방법

Publications (2)

Publication Number Publication Date
KR20100065721A KR20100065721A (ko) 2010-06-17
KR101210607B1 true KR101210607B1 (ko) 2012-12-11

Family

ID=42232401

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080124199A KR101210607B1 (ko) 2008-12-08 2008-12-08 해시 암호 장치 및 방법

Country Status (3)

Country Link
US (1) US8275126B2 (ko)
JP (1) JP5143817B2 (ko)
KR (1) KR101210607B1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9419791B2 (en) * 2012-09-21 2016-08-16 Mitsubishi Electric Corporation Hash value calculation device, hash value calculation method, and non-transitory computer-readable storage medium including computer executable instruction
US8838997B2 (en) * 2012-09-28 2014-09-16 Intel Corporation Instruction set for message scheduling of SHA256 algorithm
US8874933B2 (en) * 2012-09-28 2014-10-28 Intel Corporation Instruction set for SHA1 round processing on 128-bit data paths
JP6142078B2 (ja) * 2013-05-16 2017-06-07 コンヴィーダ ワイヤレス, エルエルシー 意味命名モデル
US10097345B2 (en) * 2015-04-14 2018-10-09 PeerNova, Inc. Secure hash algorithm in digital hardware for cryptographic applications
US10506388B1 (en) 2018-06-27 2019-12-10 Harris Global Communications, Inc. Efficient short message compression
GB2582900A (en) * 2019-03-18 2020-10-14 Pqshield Ltd Cryptography using a cryptographic state

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004053716A (ja) * 2002-07-17 2004-02-19 Fujitsu Ltd ハッシュ関数処理回路
US7181009B1 (en) 2002-12-18 2007-02-20 Cisco Technology, Inc. Generating message digests according to multiple hashing procedures
US20080123841A1 (en) 2002-10-21 2008-05-29 Stmicroelectronics Asia Pacific Pte. Ltd. Apparatus to Implement Dual Hash Algorithm

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4206205B2 (ja) 2001-03-26 2009-01-07 株式会社日立製作所 Sha演算の高速演算回路
US7400722B2 (en) 2002-03-28 2008-07-15 Broadcom Corporation Methods and apparatus for performing hash operations in a cryptography accelerator
US7684563B1 (en) * 2003-12-12 2010-03-23 Sun Microsystems, Inc. Apparatus and method for implementing a unified hash algorithm pipeline
US7599489B1 (en) * 2004-02-09 2009-10-06 Sun Microsystems Inc. Accelerating cryptographic hash computations
JP4337675B2 (ja) * 2004-07-23 2009-09-30 ソニー株式会社 暗号処理装置および暗号処理方法
US7570759B2 (en) * 2004-08-13 2009-08-04 Yen-Fu Liu System and method for secure encryption
KR100581662B1 (ko) 2005-08-31 2006-05-22 주식회사 칩스앤미디어 알고리즘이 다른 복수의 해쉬 함수 연산을 위한 공통엔진

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004053716A (ja) * 2002-07-17 2004-02-19 Fujitsu Ltd ハッシュ関数処理回路
US20080123841A1 (en) 2002-10-21 2008-05-29 Stmicroelectronics Asia Pacific Pte. Ltd. Apparatus to Implement Dual Hash Algorithm
US7181009B1 (en) 2002-12-18 2007-02-20 Cisco Technology, Inc. Generating message digests according to multiple hashing procedures

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"Hardware implementation analysis of SHA-256 and SHA-512 algorithms on FPGAs", Journal Computers and Electrical Engineering Volume 31 Issue 6, September, 2005

Also Published As

Publication number Publication date
JP2010134465A (ja) 2010-06-17
US8275126B2 (en) 2012-09-25
US20100146296A1 (en) 2010-06-10
JP5143817B2 (ja) 2013-02-13
KR20100065721A (ko) 2010-06-17

Similar Documents

Publication Publication Date Title
KR101210607B1 (ko) 해시 암호 장치 및 방법
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
US8086864B2 (en) Low power HMAC encryption apparatus
JP4890976B2 (ja) 暗号処理装置
JP3558488B2 (ja) 暗号通信システム
CN110460439A (zh) 信息传输方法、装置、客户端、服务端及存储介质
JP5648177B2 (ja) サイドチャネル攻撃に対する素数生成の保護
US20080019524A1 (en) Apparatus and method for low power aes cryptographic circuit for embedded system
GB2585885A (en) Cryptographic architecture for cryptographic permutation
CN111259416A (zh) 一种基于fpga的多算法安全加密认证系统及认证方法
JP2010277085A (ja) Rsaアルゴリズムにおける素数生成の保護
JPWO2011117929A1 (ja) 乱数生成器、暗号化装置、及び認証装置
JP2016535310A (ja) 素数の生成および記憶のための方法および装置
JP6167876B2 (ja) 電子回路、電子機器及び認証システム
CN114697095A (zh) 一种混合加解密方法、系统、装置及介质
CN116488794A (zh) 基于fpga的高速sm4密码模组实现方法及装置
CN107872315A (zh) 数据处理方法和智能终端
US20100104098A1 (en) Cryptographic method and device for scheduling and compressing message based on secure hash algorithm
CN116015610B (zh) 一种轻量级密码的检测方法
CN115632782B (zh) 基于sm4计数器模式的随机数生成方法、系统及设备
CN116610288A (zh) 随机数生成方法及装置
US20120321079A1 (en) System and method for generating round keys
US11750367B2 (en) Simulation device and method for homomorphic cryptosystem
KR100656375B1 (ko) 저전력 해쉬함수 암호화 장치
US7359509B2 (en) Method and system for generation of cryptographic keys and the like

Legal Events

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

Payment date: 20151204

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20161205

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20171204

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20181213

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20191204

Year of fee payment: 8