KR20170046185A - 보안 해시 알고리즘들을 처리하는 명령어 프로세서들, 방법들 및 시스템들 - Google Patents

보안 해시 알고리즘들을 처리하는 명령어 프로세서들, 방법들 및 시스템들 Download PDF

Info

Publication number
KR20170046185A
KR20170046185A KR1020177010445A KR20177010445A KR20170046185A KR 20170046185 A KR20170046185 A KR 20170046185A KR 1020177010445 A KR1020177010445 A KR 1020177010445A KR 20177010445 A KR20177010445 A KR 20177010445A KR 20170046185 A KR20170046185 A KR 20170046185A
Authority
KR
South Korea
Prior art keywords
data
packed data
round
bit
stored
Prior art date
Application number
KR1020177010445A
Other languages
English (en)
Other versions
KR101846392B1 (ko
Inventor
길버트 엠. 울리치
커크 에스. 얍
비노드 고팔
제임스 디. 길포드
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20170046185A publication Critical patent/KR20170046185A/ko
Application granted granted Critical
Publication of KR101846392B1 publication Critical patent/KR101846392B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/72Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Power Engineering (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Health & Medical Sciences (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

일 양상의 방법은 명령어를 수신하는 것을 포함한다. 이러한 명령어는 SHA2(Secure Hash Algorithm 2) 해시 알고리즘의 현재 라운드 (i)에 대한 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)을 포함하는 제1 패킹된 데이터의 제1 소스를 표시한다. 명령어는 또한 제2 패킹된 데이터의 제2 소스를 표시한다. 제1 패킹된 데이터는 SHA2 해시 알고리즘의 8개 상태 데이터 엘리먼트들(ai, bi, ci, di, ei, fi , gi 및 hi)의 조합된 비트 폭보다 작은 비트 폭을 갖는다. 이러한 방법은, 또한, 명령어에 응답하여 명령어에 의해 표시되는 목적지에 결과를 저장하는 것을 포함한다. 이러한 결과는, SHA2 해시 알고리즘의 적어도 1 라운드만큼 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 업데이트된, 업데이트된 상태 데이터 엘리먼트들(ai+, bi+, ei+ 및 fi+)을 포함한다.

Description

보안 해시 알고리즘들을 처리하는 명령어 프로세서들, 방법들 및 시스템들{INSTRUCTIONS PROCESSORS, METHODS, AND SYSTEMS TO PROCESS SECURE HASH ALGORITHMS}
실시예들은 명령어 처리 장치와 관련된다. 특히, 실시예들은 보안 해시 알고리즘들을 처리하는 명령어 처리 장치들 및 명령어들과 관련된다.
'Secure Hash Standard(SHS)(FTPS PUB 180-3), a Federal Information Processing Standards Publication'은, 2008년 10월에 National Institute of Standards and Technology에 의해 발표되었다. SHS 표준은 보안 해시 알고리즘들 SHA-224, SHA-256, SHA-384 및 SHA-512를 명시한다. 이러한 4개 알고리즘들은 또한 본 명세서에서 집합적으로 SHA2 해시 알고리즘들, SHA2 알고리즘들, SHA2 해시들 또는 그와 유사한 것이라 한다.
이러한 SHA2 해시 알고리즘들은 메시지라 하는 입력 데이터의 응축된 표현을 나타내는 메시지 다이제스트를 계산하는 것을 허용한다. (SHA-224 및 SHA-256에 대한) 2^64 비트들보다 적거나 또는 (SHA-384와 SHA-512에 대한) 2^128 비트들보다 적은 길이를 갖는 메시지가 해시 알고리즘에 입력될 때, 메시지 다이제스트라 불리는 결과가 출력된다. 메시지 다이제스트는 또한 가끔 다이제스트 또는 해시라 한다. 메시지 다이제스트는 SHA-224에 대해 224 비트이고, SHA-256에 대해 256 비트이고, SHA-384에 대해 384이거나 또는 SHA-512에 대해 512-비트이다. SHA-224 및 SHA-256은 32 비트 워드 길이에 기초한다. SHA-384 및 SHA-512는 64 비트 워드 길이에 기초한다.
이러한 표준에 명시되는 해시 알고리즘들은, 주어진 알고리즘에 대해, 1) 주어진 메시지 다이제스트에 대응하는 메시지를 찾거나, 또는 2) 동일한 메시지 다이제스트를 생산하는 2개의 상이한 메시지들을 찾는 것이 계산적으로 실행 불가능하다고 여겨지기 때문에, 안전하다고 한다. 이는, 메시지에 대한 임의의 변경이, 매우 높은 확률로, 상이한 메시지 다이제스트를 초래할 것이라는 점을 의미한다.
SHA2 알고리즘들은, 인증, 검증, 식별, 무결성 점검, 보안성 또는 기타 목적들을 위한 전자 디바이스들에 널리 사용된다. 이들은 여러가지 상이한 목적들로 사용될 수 있다. SHA2 알고리즘들의 흔한 사용 중 하나는 메시지들의 무결성 및/또는 메시지들에 대해 검출되는 변경들을 검증하는 것이다. 예를 들어, 초기 메시지 다이제스트가 메시지를 위해 생성될 수 있고, 이후 다른 메시지 다이제스트가, 그 메시지를 위해 재생성될 수 있으며, 메시지 자체가 변경되지 않았다고 가정하면 초기 메시지 다이제스트와 동일할 것이다. 보안 해시 함수들의 적용들의 다른 예들은, 이에 제한되는 것은 아니지만, 디지털 서명들, 메시지 인증 코드들을 생성하는 것, 파일들 또는 메시지들의 무결성을 검증하는 것, 파일들 또는 데이터를 식별하는 것, 및 의사랜덤 생성과 키 유도(key derivation)를 포함한다.
도 1은 SHA2 알고리즘(100)의 싱글 라운드의 상세들을 도시한다. 도시된 라운드와 유사한 총 64개 라운드들이 최종 메시지 다이제스트를 산출하는데 사용될 수 있다. 8개 상태 워드들(ai, bi, ci, di, ei, fi, gi 및 hi)(101)이 라운드에 대해 입력된다. 8개 상태 워드들을 표준에서는 8개 작업 변수들이라고도 한다. SHA-224 및 SHA-256에 대해서 이러한 상태 워드들 각각은 32 비트이다. SHA-384 및 SHA-512에 대해서 이러한 상태 워드들 각각은 64 비트이다. 현재 라운드에 대한 메시지 입력(즉, W(i))(102) 및 현재 라운드에 대한 상수 입력(즉, K(i))(103) 또한 또한 라운드에 대해 입력된다. SHA2 연산들의 세트(104)가 각각의 라운드에 대해 수행된다. 연산들의 세트는, 다수의 모듈로 덧셈들(덧셈 부호들이 내부에 있는 박스들로 도시됨), 및 Ch, ∑1, Maj 및 ∑0로 알려진 함수들의 값(evaluation)을 포함한다. 상태 워드들의 리맵핑(remapping)도 있다. 라운드의 출력은 8개 업데이트된 상태 워드들(ai+1, bi+1, ci+1, di+1, ei+1, fi+1, gi+1 및 hi+1)(105)이다.
64개 라운드들 각각에 대한 연산들의 세트는 이하의 연산들을 포함한다:
Figure pat00001
위에서, "ROTR"은 그 우측의 비트 수만큼 비트단위 우측 회전 연산을 지정하고, "XOR"은 논리적 배타적 OR 연산을 지정하고, "AND"는 논리적 AND 연산을 지정하고, "NOT"은 논리적 NOT 연산을 지정한다. 회전량들은 SHA-256에 대해 특정적이다. 기타 SHA2 알고리즘들은 상이한 시프트 및 회전량들을 사용한다.
알 수 있듯이, SHA2 알고리즘들의 각 라운드는 다수의 연산들을 포함한다. 또한, 메시지 다이제스트를 생성하는 것은 이러한 라운드들을 64개 포함한다. 중요한 도전 중 하나는, 종래에 SHA2 알고리즘들을 구현하는 것이 프로세스 상에서 다수의 명령어들을 실행하는 것을 포함한다는 점이다. 보통, SHA2 알고리즘들의 각 라운드는 몇몇 내지 많은 명령어들을 취할 수 있다. 예를 들어, 하나의 가능한 구현에서는, 라운드 내에서, 회전들, 논리적 AND, XOR 및 NOT 연산들, 덧셈들 등의 각각을 수행하는데 개별 명령어들이 사용될 수 있다. 이는, 64개 라운드들이 있다는 사실과 혼합되어, SHA2 알고리즘들의 구현을 매우 계산적으로 집약적이 되게 하고 상당량의 시간을 차지하는 경향이 있을 수 있다.
본 발명은, 본 발명의 실시예를 예시하는데 사용되는 이하의 설명 및 첨부 도면들을 참조하여 가장 잘 이해될 수 있다. 도면에서:
도 1은 SHA2(Secure Hash Algorithm 2) 해시 알고리즘의 싱글 라운드의 상세들을 도시한다.
도 2는 하나 이상의 SHA2 알고리즘들을 수행하는데 유용한 하나 이상의 명령어들을 포함하는 명령어 세트를 갖는 명령어 처리 장치의 블럭도이다.
도 3은 SHA2 보안 해시 알고리즘을 처리하는데 유용한 명령어의 적어도 하나의 실시예를 실행하도록 동작될 수 있는 SHA2 실행 로직을 갖는 명령어 처리 장치의 일 실시예의 블럭도이다.
도 4는 SHA2 보안 해시 알고리즘에 유용한 명령어를 처리하는 방법의 일 실시예의 블럭 흐름도이다.
도 5는 SHA2 알고리즘의 라운드의 일부를 도시한다.
도 6은 레지스터에서 4개 상태 워드들 또는 엘리먼트들(a, b, e 및 f)의 서브세트의 일 실시예의 블럭도이다.
도 7a는 SHA2 입력 명령어의 제1 실시예에 의해 수행되는 연산의 블럭도이다.
도 7b는 SHA2 2 라운드 명령어의 일 실시예에 의해 수행되는 연산의 블럭도이다.
도 8a는 SHA2 입력 명령어의 제2 실시예에 의해 수행되는 연산의 블럭도이다.
도 8b는 SHA2 2 라운드 로우 업데이트 명령어의 일 실시예에 의해 수행되는 연산의 블럭도이다.
도 8c는 SHA2 2 라운드 하이 업데이트 명령어의 일 실시예에 의해 수행되는 연산의 블럭도이다.
도 9는 SHA2 128 비트 2 라운드 명령어의 일 실시예에 의해 수행되는 연산의 블럭도이다.
도 10은 SHA2 256 비트 2라운드 명령어의 일 실시예에 의해 수행되는 연산의 블럭도이다.
도 11은 SHA2 128 비트 4 라운드 명령어의 일 실시예에 의해 수행되는 연산의 블럭도이다.
도 12는 SHA2 512 비트 4 라운드 명령어의 일 실시예에 의해 수행되는 연산의 블럭도이다.
도 13a-c는 적합한 명령어 포맷들의 블럭도들이다.
도 14는 패킹된 데이터 레지스트터들의 적합한 세트의 예시적인 실시예의 블럭도이다.
도 15a는 VEX 프릭픽스, 실제 오피코드 필드, Mod R/M 바이트, SIB 바이트, 변위 필드(displacement field), 및 IMM8을 포함하는 예시적인 AVX 명령어 포맷을 도시한다.
도 15b는 도 15a로부터의 필드들이 풀 오피코드 필드 및 베이스 연산 필드를 구성하는 것을 도시한다.
도 15c는 도 15a로부터의 필드들이 레지스터 인덱스 필드(1544)를 구성하는 것을 도시한다.
도 16은 본 발명의 일 실시예에 따른 레지스터 아키텍처의 블럭도이다.
도 17a는, 본 발명의 실시예들에 따른, 예시적인 순차적(in-order) 파이프라인과 예시적인 레지스터 리네이밍, 비순차적(out-of-order) 발행/실행 파이프라인 양자 모두를 예시하는 블럭도이다.
도 17b는, 실행 엔진 유닛에 연결되는 프론트 엔드 유닛을 포함하는 프로세서 코어를 도시하며, 양자 모두는 메모리 유닛에 연결된다.
도 18a는, 본 발명의 실시예들에 따른, 단일 프로세서 코어, 온-다이 상호접속 네트워크에 대한 그의 접속 및 레벨 2(L2) 캐시의 그의 로컬 서브세트의 블럭도이다.
도 18b는, 본 발명의 실시예들에 따른 도 18a에서의 프로세서 코어의 부분의 확대도이다.
도 19는, 본 발명의 실시예들에 따른, 둘 이상의 코어를 가질 수 있고, 통합 메모리 컨트롤러를 가질 수 있고, 통합 그래픽을 가질 수 있는 프로세서의 블럭도이다.
도 20은 본 발명의 일 실시예에 따른 시스템의 블럭도를 도시한다.
도 21은 본 발명의 일 실시예에 따른 제1 보다 상세한 예시적인 시스템의 블럭도를 도시한다.
도 22는 본 발명의 일 실시예에 따른 제2 보다 상세한 예시적인 시스템의 블럭도를 도시한다.
도 23은 본 발명의 일 실시예에 따른 SoC의 블럭도를 도시한다.
도 24는 본 발명의 실시예들에 따라 소스 명령어 세트 내의 바이너리 명령어들을 타겟 명령어 세트 내의 바이너리 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블럭도이다.
본 명세서에는 SHA2 해시 알고리즘들(예를 들어, SHA-224, SHA-256, SHA-384 및 SHA-512)을 수행하기에 유용한 명령어들, 이러한 명령어들을 실행하는 프로세서들, 이러한 명령어들을 처리하거나 또는 실행할 때 프로세서들에 의해 수행되는 방법들, 및 이러한 명령어들을 처리하거나 또는 실행하는 하나 이상의 프로세서들을 포함하는 시스템들이 설명된다. 이하의 설명에서는, 다수의 특정 상세들이 제시된다(예를 들어, 특정 명령어 기능들, 데이터 포맷들, 레지스터들 내의 데이터 배치들, 명령어 포맷들, 프로세서 구성들, 실행 로직, 마이크로아키텍처 상세들, 연산들의 시퀀스들 등). 그러나, 본 발명의 실시예들은 이러한 특정 상세들 없이 시행될 수 있다는 점이 이해된다. 다른 경우들에서, 공지된 회로들, 구조들 및 기술들은 이러한 설명의 이해를 불명료하게 하지 않기 위해 상세히 도시되지 않았다.
도 2는 하나 이상의 SHA2 알고리즘들을 수행하는데 유용한 하나 이상의 명령어들(208)을 포함하는 명령어 세트(207)를 갖는 프로세서 또는 기타 명령어 처리 장치(206)의 예시적인 실시예의 블럭도이다. 프로세서는 다양한 CISC(Complex Instruction Set Computing) 프로세서들, 다양한 RISC(Reduced Instruction Set Computing) 프로세서들, 다양한 VLIW(Very Long Instruction Word) 프로세서들, 이들의 다양한 혼성체들(hybrids), 또는 기타 타입의 프로세서들 전체 중 임의의 것일 수 있다. 일부 실시예들에서, 프로세서는 (예를 들어, 데스크톱, 랩톱, 서버, 및 유사 컴퓨터들에 사용되는 타입의) 범용 프로세서일 수 있다. 대안적으로, 프로세서는 특수 목적 프로세서일 수 있다. 적합한 특수 목적 프로세서들의 예들은, 몇몇 예를 들자면, 암호화 프로세서들, 통신 프로세서들, 네트워크 프로세서들, DSP들(Digital Signal Processors), 암호화 코-프로세서들, 임베디드 프로세서들, 그래픽 프로세서들 및 컨트롤러들(예를 들어, 마이크로컨트롤러들)을 포함하지만, 이에 제한되는 것은 아니다.
프로세서 또는 장치는 ISA(Instruction Set Architecture)(209)를 갖는다. ISA는, 프로그래밍과 관련된 프로세서의 아키텍처의 일부를 나타내고, 프로세서의 네이티브 명령어들, 아키텍처 레지스터들, 데이터 타입들, 어드레싱 모드들, 메모리 아키텍처들, 인터럽트 및 실행 핸들링 및 외부 I/O(Input and Output) 등을 보통 포함한다. ISA는 ISA를 구현하기 위해 선택되는 특정 프로세서 설계 기술들을 일반적으로 나타내는 마이크로아키텍처와 구별된다.
ISA는 명령어 세트(207)을 포함한다. 명령어 세트의 명령어들은 마이크로명령어들 또는 마이크로 오피들(예를 들어, 매크로명령어들을 디코딩하는 프로세서의 디코더로부터 생기는 것들)과 달리, 매크로명령어들(예를 들어, 실행을 위해 프로세서에 제공되는 명령어들)을 나타낸다. 명령어 세트는 하나 이상의 SHA2 알고리즘들을 수행하는 처리에 각각 유용한 하나 이상의 명령어들(208)을 포함한다.
ISA는 또한 아키텍처상으로-가시적인 레지스터들(210)을 포함한다. 아키텍처 레지스터들은 일반적으로 온다이(on-die) 프로세서 저장 장소들을 나타낸다. 아키텍처 레지스터는 본 명세서에서 간단히 레지스터라고도 할 수 있다. 아키텍처 레지스터, 레지스터 파일 및 레지스터라는 문구들은 본 명세서에서 소프트웨어 및/또는 프로그래머에게 가시적인(예를 들어, 소프트웨어 가시적인) 레지스터들 및/또는 오퍼랜드들을 식별하기 위해 매크로 명령어들에 의해 특정되는 레지스터들을 말하는데 사용된다. 이러한 레지스터들은 주어진 마이크로아키텍처에서의 비-아키텍처 또는 비-아키텍처상으로 가시적인 레지스터들(예를 들어, 명령어들, 재정리 버퍼들, 리타이어먼트 레지스터들 등에 의해 사용되는 임시 레지스터들)과 대조된다. 예시된 레지스터들은, 패킹된, 벡터 또는 SIMD(Single Instruction Multiple Data) 데이터를 저장하도록 각각 동작될 수 있는 패킹된 데이터 레지스터들(211)을 포함한다. SHA2 알고리즘(들)(208)을 처리하는 명령어(들)는, 패킹된 데이터 레지스터들 내의 소스 데이터를 나타낼 수 있고, 패킹된 데이터 레지스터들에 결과 데이터가 저장될 목적지들을 나타낼 수 있다.
프로세서 또는 장치는 또한 SHA2 실행 로직(212)을 포함한다. SHA2 실행 로직은, 실행 유닛, 기능성 유닛, 명령어에 응답하는 회로 등을 포함할 수 있다. SHA2 실행 논리는 명령어(들)(208)을 실행하거나 또는 처리하도록 동작될 수 있다.
도 3은 SHA2 보안 해시 알고리즘을 처리하는데 유용한 명령어(308)의 적어도 일 실시예를 실행하도록 동작될 수 있는 SHA2 실행 로직(312)을 갖는 프로세서 또는 기타 명령어 처리 장치(306)의 예시적인 일 실시예의 블럭도이다. 일부 실시예들에서, 명령어 처리 장치는 프로세서일 수 있고 및/또는 프로세서에 포함될 수 있다. 일부 실시예들에서, 명령어 처리 장치는 도 2의 장치에 포함될 수 있거나, 그렇지 않다면 명령어 처리 장치(306)는 유사한 또는 상이한 장치에 포함될 수 있다.
장치(306)는 명령어(308)를 수신할 수 있다. 예를 들어, 명령어는 명령어 페치 유닛, 명령어 큐 또는 메모리로부터 수신될 수 있다. 명령어는 장치에 의해 인식되고 특정 연산들을 수행하도록 장치를 제어하는 머신 명령어, 매크로명령어 또는 제어 신호를 나타낼 수 있다. 명령어는 제1 소스(314)를 (예를 들어, 비트들 또는 하나 이상의 필드들을 통해) 명백하게 명시하거나, 또는 다른 방식으로 표시(예를 들어, 내재적으로 표시함)할 수 있다. 명령어는 또한 제2 소스(316)를 명백하게 명시하거나 또는 다른 방식으로 표시할 수 있다. 명령어는 또한 명령어의 결과가 저장될 목적지(318)(예를 들어, 목적지 저장 장소)를 명백하게 명시하거나 또는 다른 방식으로 표시할 수 있다. 일부 실시예들에서는, 제1 및 제2 소스들 중 하나가 목적지로서 재사용될 수 있다(예를 들어, 명령어의 소스/목적지 필드가 소스 및 목적지로서 사용되는 레지스터를 특정할 수 있음).
도시된 장치는 명령어 디코드 유닛 또는 디코더(313)를 포함한다. 디코더는, 상위 레벨 머신 명령어들 또는 매크로명령어들을 수신하고 디코딩하며, 본래의 상위 레벨 명령어를 반영하고 및/또는 그로부터 도출되는 하나 이상의 하위 레벨 마이크로-연산들, 마이크로-코드 포인트들, 마이크로명령어들, 또는 기타 하위 레벨 명령어들 또는 제어 신호들을 출력할 수 있다. 하나 이상의 하위 레벨 명령어들 또는 제어 신호들은 하나 이상의 하위 레벨(예를 들어, 회로 레벨 또는 하드웨어 레벨) 연산들을 통해 상위 레벨 명령어의 연산을 구현할 수 있다. 디코더는, 이에 제한되는 것은 아니지만, 마이크로코드 ROM들(Read Only Memories), 룩업 테이블들, 하드웨어 구현들, PLA들(Programmable Logic Arrays), 및 이 기술분야에 알려진 디코더들을 구현하는 데 사용되는 기타 메커니즘들을 포함하는 다양한 상이한 메커니즘들을 사용하여 구현될 수 있다.
다른 실시예들에서는, 디코더(313)를 갖는 대신에, 명령어 에뮬레이터, 트랜슬레이터, 모퍼(morpher), 인터프리터 또는 기타 명령어 변환 로직이 사용될 수 있다. 다양한 상이한 타입들의 명령어 변환 로직이, 관련 분야에 알려져 있고, 소프웨어, 하드웨어, 펌웨어 또는 이들의 조합으로 구현될 수 있다. 명령어 변환 로직은, 명령어를 수신하고, 수신된 명령어를 하나 이상의 대응하는 도출된 명령어들 또는 제어 신호들로 에뮬레이트, 트랜슬레이트, 모프, 인터프리트 또는 다른 방식으로 변환할 수 있다. 또 다른 실시예들에서는, 명령어 변환 로직 및 디코더 양자 모두가 사용될 수 있다.
장치는 또한 이키텍처적 패킹된 데이터 레지스터들(311)의 세트를 포함한다. 패킹된 데이터 레지스터들은, 공지된 기술들을 사용하여 상이한 마이크로아키텍처들에서 상이한 방식으로 구현될 수 있고, 임의의 특정 타입의 회로에 제한되는 것은 아니다. 다양한 상이한 타입의 레지스터들이 적합하다. 적합한 타입들의 레지스터들의 예들은, 이에 제한되는 것은 아니지만, 전용 물리적 레지스터들, 레지스터 리네이밍을 사용하는 다이나믹하게 할당되는 물리적 레지스터들 및 이들의 조합들을 포함한다. 도시된 바와 같이, 일부 실시예들에서는, 제1 소스(314), 제2 소스(316) 및 목적지(318)가 각각 패킹된 데이터 레지스터들 중 하나일 수 있다. 대안적으로, 적합한 메모리 장소들 또는 기타 저장 장소들이 이들 중 하나 이상에 대해 사용될 수 있다.
SHA2 실행 로직(312)은 패킹된 데이터 레지스터들(311)과 및 디코더(313)와 연결된다. SHA2 실행 로직은, 디코더로부터, 하나 이상의 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 기타 명령어들, 또는 명령어(308)들을 반영하거나 그로부터 도출되는 기타 제어 신호들을 수신할 수 있다. SHA2 실행 로직은, 명령어(308)에 응답하여 및/또는 그 결과로서, 명령어에 의해 명시되거나 또는 다른 방식으로 표시되는 목적지(318)에 패킹된 데이터 결과(319)를 저장하도록 동작될 수 있다. SHA2 실행 로직 및/또는 장치는, 명령어를 실행 및/또는 처리하고, 명령어에 응답하여(예를 들어, 명령어로부터 도출되는 하나 이상의 마이크로명령어들 또는 기타 제어 신호들에 응답하여) 결과를 저장하도록 동작될 수 있는 특수 또는 특정 로직(예를 들어, 펌웨어 및/또는 소프트웨어와 잠재적으로 조합되는 회로 또는 기타 하드웨어)을 포함할 수 있다.
일부 실시예들에서, 제1 소스(314)는 SHA2 해시 알고리즘의 현재 라운드 (i)에 대한 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)를 포함하는 제1 패킹된 데이터(315)를 포함할 수 있고, 제2 소스(316)는 제2 패킹된 데이터(예를 들어, 다양한 실시예들에서 상태 데이터 엘리먼트들 및/또는 메시지 및 상수 데이터)를 포함할 수 있다. 일부 실시예들에서, 결과(319)는, SHA2 해시 알고리즘의 적어도 1 라운드만큼 제1 소스(314)의 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 업데이트된, 업데이트된 상태 데이터 엘리먼트들(ai+, bi+, ei+ 및 fi +)을 포함할 수 있다. 예를 들어, 업데이트된 상태 데이터 엘리먼트 ai +는 SHA2 해시 알고리즘의 1 라운드만큼 업데이트된 현재 라운드에 대한 대응하는 시작 상태 데이터 엘리먼트 ai를 나타낼 수 있고, 업데이트된 상태 데이터 엘리먼트 bi +는 SHA2 해시 알고리즘의 1 라운드만큼 업데이트된 대응하는 시작 상태 데이터 엘리먼트 bi를 나타낼 수 있고, 등등이다.
일부 실시예들에서, 제1 패킹된 데이터(315)는 SHA2 해시 알고리즘의 8개 상태 데이터 엘리먼트들(즉, ai, bi, ei 및 fi와 나머지 4개인 ci, di, gi 및 hi)의 조합된 비트 폭보다 작은 비트 폭을 가질 수 있다. 일부 실시예들에서, 제1 패킹된 데이터의 비트 폭은 SHA2 해시 알고리즘의 8개 상태 데이터 엘리먼트들의 조합된 비트 폭의 약 1/2일 수 있다. 예를 들어, SHA-256의 경우, 8개 상태 데이터 엘리먼트들 각각은 32 비트일 수 있고, 8개 상태 데이터 엘리먼트들의 조합된 비트 폭 256 비트일 수 있는 반면, 제1 패킹된 데이터는, 단지 128 비트의 폭을 가질 수 있고(예를 들어, 128 비트 레지스터에 저장됨), 8개 32 비트 상태 데이터 엘리먼트들 중 4개(예를 들어, ai, bi, ei 및 fi)만을 보유할 수 있다. 다른 예로서, SHA-512의 경우, 8개 상태 데이터 엘리먼트들 각각은 64 비트일 수 있고, 8개 상태 데이터 엘리먼트의 조합된 비트 폭은 512 비트일 수 있는 반면, 제1 패킹된 데이터는 단지 256 비트의 폭을 가질 수 있고(예를 들어, 256 비트 레지스터에 저장됨), 8개 64 비트 상태 데이터 엘리먼트들 중 4개만 보유할 수 있다.
일부 실시예들에서, 결과는 SHA2 해시 알고리즘의 2 라운드들에 의해 제1 소스의 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 업데이트된, 업데이트된 상태 데이터 엘리먼트들(ai+2, bi+2, ei+2 및 fi + 2)을 포함할 수 있다. 일부 실시예들에서, 결과는 SHA2 해시 알고리즘의 4 라운드들에 의해 제1 소스의 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 업데이트된, 업데이트된 상태 데이터 엘리먼트들(ai+4, bi+4, ei+4 및 fi + 4)을 포함할 수 있다. 이러한 명령어들의 특수 예들이 이하 더욱 설명될 것이다.
일부 실시예들에서, 명령어는 2개 또는 오직 2개 명령어들(즉, 제3 소스를 갖지 않음)을 명시할 수 있다. 다른 실시예들에서, 명령어는 제1 및 제2 소스들에 추가하여 제3 소스를 표시할 수 있다(예를 들어, 제3 소스를 내재적으로 표시하거나 또는 명백하게 명시함). 이러한 명령어들의 특수 예들이 이하 더욱 설명될 것이다.
이하 더욱 설명되는 바와 같이, 일부 실시예들에서는, SHA2 라운드의 처리 중 일부가 명령어의 실행의 범위들을 넘어서 구현될 수 있다. 예를 들어, 이하 더욱 설명되는 바와 같이, 일부 실시예들에서 X와 Y의 계산은 다른 명령어에 의해 수행될 수 있다. 다른 예로서, 일부 실시예들에서, 메시지 데이터의 계산 및/또는 메시지들과 상수들의 덧셈은 라운드의 외부에서 수행될 수 있다. 일부 실시예들에서, 명령어의 실행은, ∑0 함수(예를 들어, SHA-256에 대한 (ai ROTR 2) XOR (ai ROTR 13) XOR (ai ROTR 22)) 및/또는 Maj 함수(예를 들어, SHA-256에 대한 (ai AND bi) XOR (ai AND ci) XOR (ai AND ci))의 연산들을 수행하는 것을 포함할 수 있다.
유리하게도, 일부 실시예들에서는, SHA2 알고리즘의 적어도 1 라운드만큼 상태 데이터 엘리먼트들 중 4개를 업데이트하는데 단일 명령어가 사용될 수 있다. 이는 SHA2 알고리즘을 구현하는 효율성 및/또는 속도를 상당히 향상시키는데 도움이 될 수 있다.
설명을 불명료하게 하는 것을 회피하기 위해, 비교적 간단한 장치(306)가 도시되고 설명되었다. 다른 실시예들에서, 장치는, 예를 들어, 명령어 페치 유닛, 명령어 스케줄링 유닛, 분기 예측 유닛, 명령어 및 데이터 캐시들, 명령어 및 데이터 변환 색인 버퍼들, 프리페치 버퍼들, 마이크로명령어 큐들, 마이크로명령어 시퀀서들, 버스 인터페이스 유닛들, 제2 또는 상위 레벨 캐시들, 리타이어먼트 유닛, 레지스터 리네이밍 유닛, 프로세스들에 포함되는 기타 컴포넌트들 및 이들의 다양한 조합들과 같은 다른 컴포넌트들을 옵션으로 포함할 수 있다. 실시예들은 다수의 코어들, 논리적 프로세서들 또는 실행 엔진들을 가질 수 있다. 본 명세서에 개시되는 적어도 하나의 명령어의 일 실시예를 실행하도록 동작될 수 있는 SHA2 실행 로직은, 코어들, 논리적 프로세서들 또는 실행 엔진들 중 적어도 하나에 포함될 수 있다. 프로세서들에는 글자 그대로 이러한 컴포넌트들의 여러가지 상이한 조합들/구성들이 존재하고, 본 발명의 범위가 임의의 이러한 조합/구성에 제한되는 것은 아니다.
도 4는 SHA2 보안 해시 알고리즘에 유용한 명령어를 처리하는 방법(320)의 일 실시예의 블럭 흐름도이다. 다양한 실시예들에서, 이러한 방법은, 범용 프로세서, 특수 목적 프로세서(예를 들어, 암호화 코-프로세서 또는 코어) 또는 기타 타입의 명령어 처리 장치에 의해 수행될 수 있다. 일부 실시예들에서, 방법(320)은, 도 2 및/또는 도 3 중 어느 하나의 장치, 또는 유사한 장치에 의해 수행될 수 있다. 대안적으로, 방법(320)은 상이한 장치에 의해 수행될 수 있다. 이러한 장치에 대해 본 명세서에 설명되는 컴포넌트들, 특징들 및 특정 옵션형 상세들은 또한 실시예들에서 이러한 장치에 의해 및/또는 이러한 장치로 수행될 수 있는 방법(320)에 옵션으로 적용될 수 있다. 게다가, 도 2 및/또는 도 3의 장치는 도 4와 동일하거나, 유사하거나 상이한 연산들 및 방법들을 수행할 수 있다.
이러한 방법은 블럭 321에서 명령어를 수신하는 것을 포함한다. 다양한 양상들에서, 이러한 명령어는, 오프-프로세서 소스로부터(예를 들어, 메인 메모리, 디스크 또는 버스나 상호접속으로부터), 또는 온-프로세서 소스로부터(예를 들어, 명령어 캐시로부터), 프로세서, 명령어 처리 장치 또는 이들 중 일부(예를 들어, 디코더, 명령어 변환기 등)에서 수신될 수 있다.
일부 실시예들에서, 명령어는 SHA2 해시 알고리즘의 현재 라운드 (i)에 대한 상태 데이터 엘리먼트들((ai, bi, ei 및 fi)을 포함하는 제1 패킹된 데이터의 제1 소스를 표시한다. 명령어는 또한 제2 패킹된 데이터의 제2 소스를 표시한다. 일부 실시예들에서, 제1 패킹된 데이터는 SHA2 해시 알고리즘의 8개 상태 데이터 엘리먼트들의 조합된 비트 폭보다 작은 비트 폭을 가질 수 있다.
블럭 322에서, 결과는, 명령어에 응답하여, 명령어의 결과로서, 및/또는 명령어에 의해 명시되는 바와 같이, 명령어에 의해 명시되거나 또는 다른 방식으로 표시되는 목적지에 저장된다. 일부 실시예들에서, 이러한 결과는, SHA2 해시 알고리즘의 적어도 1 라운드만큼 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 업데이트된, 업데이트된 상태 데이터 엘리먼트들(ai+, bi+, ei+ 및 fi +)을 포함할 수 있다.
도시된 방법은 아키텍처상 가시적인(예를 들어, 소프트웨어 관점에서 가시적인) 연산들을 포함한다. 다른 실시예들에서, 이러한 방법은 하나 이상의 마이크로아키텍처 연산들을 옵션으로 포함할 수 있다. 예를 들어, 명령어들은 페치되어, 하나 이상의 명령어들 또는 제어 신호들로 디코드(또는 다른 방식으로 변환)될 수 있다. 소스 오퍼랜드들이 액세스될 수 있고/있거나 수신될 수 있다. 실행 유닛 또는 실행 로직은, 명령어에 의해 명시되는 연산을 수행하도록 인에이블될 수 있고, 이러한 연산을 수행할 수 있다(예를 들어, 명령어들의 연산들을 구현하는 마이크로아키텍처 연산들이 수행될 수 있음). 예를 들어, 배타적 OR 연산들, 회전 연산들, 덧셈 연산들 등이 본 명세서에서 다른 곳에서 설명된 바와 같이 수행될 수 있다. 연산을 수행하는 상이한 마이크로아키텍처 방식들이 고려된다. 다른 방법 실시예들은 이러한 아키텍처상 가시적인 연산들을 하나 이상 포함할 수 있다.
도 5는 상태 워드들 또는 엘리먼트들(a-h)가 업데이트되는 SHA2 알고리즘의 라운드(534)의 일부를 도시한다. SHA2 알고리즘의 특성은, 각 라운드 내에서 상태 워드들(a 및 e)의 값들만이 새로운 것이고 미리 결정되지 않는다는 점이다. 이러한 상태 워드들(a 및 e)은 SHA2 알고리즘, 메시지 및 상수 입력들 등의 함수들에 기초하여 매 라운드 결정된다. 도면에서, 이러한 함수들은 T1 및 T2로 통합된다. 나머지 상태 워드들 모두는 나머지 상태 엘리먼트들 중 하나로부터 그대로 이동된 이전의(old) 또는 미리 결정된 값들을 갖는다. 예를 들어, 그 라운드 이후 상태 엘리먼트 ci +1의 값은 현재 라운드의 상태 엘리먼트 bi의 값과 동등하다. 결과적으로, SHA2 알고리즘의 2 라운드들 이후 현재 라운드의 상태 엘리먼트 ai의 값은 상태 엘리먼트 ci +2의 값이 되고, 2 라운드들 이후 bi의 값은 di +2의 값이 되고, 2 라운드들 이후 ei의 값은 gi+2의 값이 되며, 2 라운드들 이후 fi의 값은 hi+2의 값이 된다.
도 6은 레지스터(615)에서의 4개의 상태 워드들 또는 엘리먼트들(ai, bi, ei 및 fi)의 유용한 서브세트의 일 실시예의 블럭도이다. 이러한 상태 워드들 또는 엘리먼트들은, 도시된 순서로 저장되거나, 또는 여러 상이한 순서들로 저장될 수 있다. 이러한 4개 상태 워드들을 레지스터에 저장하는 유용한 결과 및 이점은, SHA2 알고리즘의 2 라운드들 이후, 이들이 4개의 상보형 상태 엘리먼트들(ci+2, di+2, gi+2 및 hi + 2)과 동등하다는 점이다. 일부 실시예들에서는, ci +2, di +2, gi +2 및 hi + 2 중 임의의 것을 계산할 필요보다는 오히려, 레지스터(615)의 엘리먼트들(ai, bi, ei 및 fi)의 값들이 단순히 레지스터(619)에 이동되거나, 복사되거나 또는 다른 방식으로 저장될 수 있다.
도 7a-b는, SHA2 해시 알고리즘의 2 라운드들에 의해 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 업데이트된, 업데이트된 상태 데이터 엘리먼트들(ai+2, bi+2, ei+2 및 fi + 2)를 생성하도록 동작될 수 있는 상보형 명령어들의 쌍의 동작들을 도시한다. 일부 실시예들에서, 이러한 명령어들은 2개의 소스 오퍼랜드들만을 사용한다(예를 들어, 2개의 소스 오퍼랜드들만이 이러한 명령어들에 대해 특정되는 것을 허용하는 ISA 또는 마이크로아키텍처들에 유용함). 이러한 명령어들은, SHA2 해시 알고리즘의 8개 32 비트 상태 데이터 엘리먼트들의 조합된 비트 폭(즉, 256 비트)의 1/2인 비트 폭(즉, 128 비트)을 갖는 128 비트 패킹된 데이터 및/또는 레지스터들을 사용한다. 상태 엘리먼트들의 전체 폭이 2개의 이러한 레지스터들에 맞을 것이지만, SHA2 알고리즘의 메시지 및 상수 입력들 또한 도입될 필요가 있다. 이러한 명령어들의 쌍은, 메시지 및 상수 입력들을 도입하는 하나의 명령어(즉, 도 7a의 것) 및 상태 엘리먼트들을 업데이트하는 다른 명령어(즉, 도 7b의 것)를 제공한다. 다른 실시예들에서는, 256 비트 패킹된 데이터 및/또는 레지스터들을 사용하여 512 비트의 조합된 상태를 갖는 SHA2 알고리즘들에 대해 유사한 쌍의 명령어들이 사용될 수 있다.
도 7a는 SHA2 입력 명령어(SHA2_in)의 일 실시예에 의해 수행되는 연산(740)의 블럭도이다. 이러한 명령어는, 제1 소스(714A)를 명시하거나 또는 다른 방식으로 표시하고, 제2 소스(716A)를 명시하거나 또는 다른 방식으로 표시하고, 목적지(718A)를 명시하거나 또는 다른 방식으로 표시한다. 일부 실시예들에서, 제1 소스, 제2 소스 및 목적지는 128 비트 레지스터들 또는 기타 저장 장소들일 수 있다. 제1 소스는 4개의 32 비트 상태 데이터 엘리먼트들(ci, di, gi 및 hi)을 포함하는 제1 128 비트 패킹된 데이터를 갖는다. 예를 들어, 도면에서, hi는 비트 [31:0]에 저장되고, gi는 비트 [63:32]에 저장되고, di는 비트 [95:64]에 저장되며, ci는 비트 [127:96]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
제2 소스는 2개의 32 비트 상태 데이터 엘리먼트들(ei 및 fi)를 포함하는 제2 128 비트 패킹된 데이터를 갖는다. 도시된 실시예에서, ei는 비트 [127:96]에 저장되고, fi는 비트 [64:95]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다. 제2 소스는 또한 SHA2 알고리즘의 2 라운드들(즉, 현재 라운드 및 현재 라운드 이후 1 라운드)에 대한 메시지 및 상수 입력들을 나타내는 2개의 32 비트 데이터 엘리먼트들을 갖는다. 도시된 실시예에서, 현재 라운드에 대한 메시지 입력 W(i) 더하기 현재 라운드에 대한 상수 입력 K(i)를 나타내는 제1 데이터 엘리먼트는 [31:0]에 저장되고, 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)를 나타내는 제2 데이터 엘리먼트는 [63:32]에 저장된다. 다른 실시예에서, W(i), W(i+1), K(i) 및 K(i+1) 각각은 제2 패킹된 데이터의 4개 데이터 엘리먼트들에 각각 저장될 수 있다.
SHA2 실행 로직(712A)은 명령어에 응답하여 목적지에 128 비트 패킹된 데이터 결과를 저장하도록 동작될 수 있다. 일부 실시예들에서, 이러한 결과는 4개의 결과 데이터 엘리먼트들을 포함한다. 도시된 실시예에서, 제1 결과 데이터 엘리먼트(Y)는 비트 [31:0]에 저장된다. 제1 결과 데이터 엘리먼트(Y)는, 현재 라운드에 대한 메시지 입력 W(i) 더하기 현재 라운드에 대한 상수 입력 K(i)(즉, W(i) + K(i)) 더하기 현재 라운드에 대한 상태 데이터 엘리먼트 hi 더하기 현재 라운드에 대한 상태 엘리먼트들(ei, fi 및 gi)을 갖는 Ch 함수의 값(즉, Ch(ei, fi, gi)) 더하기 현재 라운드에 대한 상태 엘리먼트(ei)를 갖는 시그마1 함수의 값(즉, ∑1(ei))의 합을 나타낸다.
제2 결과 데이터 엘리먼트(X)는 비트 [63:32]에 저장된다. 제2 결과 데이터 엘리먼트(X)는, 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)(즉, W(i+1) + K(i+1)) 더하기 현재 라운드에 대한 상태 데이터 엘리먼트 gi의 합을 나타낸다. X 및 Y 엘리먼트들은 2 라운드들에 대한 메시지 및 상수 입력들을 포함할 뿐만 아니라 Y 파라미터는 Ch 및 시그마1 함수들의 값을 포함한다. X 및 Y 엘리먼트들은, SHA2 알고리즘들에 정의되지 않고, 그 대신 본 명세서에 개시되는 명령어들에 대한 이러한 파라미터들의 새로운 그룹화들이며, 임의로 명명된다.
이러한 결과는 또한 비트 [95:64]에 저장되는 현재 라운드에 대한 상태 데이터 엘리먼트(di) 및 비트 [127:96]에 저장되는 현재 라운드에 대한 상태 데이터 엘리먼트(ci)를 포함한다. 목적지에서의 이러한 특정 순서가 요구되는 것은 아니다. 일부 실시예들에서는, 제1 소스가 목적지로서 재사용되고, 데이터 엘리먼트들(ci, di, X, Y)는 데이터 엘리먼트들(ci, di, gi 및 hi)를 덮어쓴다. X 및 Y 엘리먼트들이 결정되면 상태 엘리먼트들(gi 및 hi)는 더 이상 필요없다. 일부 실시예들에서, 이는 2개 소스 오퍼랜드들만을 갖는 단일 명령어로 2 라운드들 이후 상태 엘리먼트들(ai+2, bi+2, ei+2 및 fi + 2)가 계산되게 할 수 있다(예를 들어, 도 7b에 도시된 바와 같음).
도 7b는 SHA2 2 라운드 명령어(SHA2_RNDS2)의 일 실시예에 의해 수행되는 연산(730B)의 블럭도이다. 이러한 명령어는 제1 소스(714B)를 명시하거나 또는 다른 방식으로 표시하고, 제2 소스(716B)를 명시하거나 또는 다른 방식으로 표시하고, 목적지(718B)를 명시하거나 또는 다른 방식으로 표시한다. 일부 실시예들에서, 제1 소스, 제2 소스 및 목적지는 128 비트 레지스터들 또는 기타 저장 장소들일 수 있다.
제1 소스는 4개의 32 비트 데이터 엘리먼트들을 포함하는 제1 128 비트 패킹된 데이터를 갖는다. 일부 실시예들에서, 제1 128 비트 패킹된 데이터는 도 7a의 SHA2 입력 명령어의 결과와 동등하거나 또는 동일할 수 있다. 일부 실시예들에서, SHA2 입력 명령어의 목적지(718A)는 SHA2 2 라운드 명령어의 제1 소스(714B)로서 표시될 수 있다. 도면에 도시된 바와 같이, 제1 소스는 비트 [31:0]에 저장되는 제1 데이터 엘리먼트(Y)를 포함한다. 제1 데이터 엘리먼트(Y)는, 현재 라운드에 대한 메시지 입력 W(i) 더하기 현재 라운드에 대한 상수 입력 K(i)(즉, W(i) + K(i)) 더하기 현재 라운드에 대한 상태 데이터 엘리먼트 hi 더하기 현재 라운드에 대한 상태 엘리먼트들(ei, fi 및 gi)를 갖는 Ch 함수의 값(즉, Ch(ei, fi, gi)) 더하기 현재 라운드에 대한 상태 엘리먼트(ei)를 갖는 시그마1 함수의 값(즉, ∑1(ei))의 합을 나타낸다. 제2 데이터 엘리먼트(X)는 비트 [63:32]에 저장된다. 제2 데이터 엘리먼트(X)는, 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)(즉, W(i+1) + K(i+1)) 더하기 현재 라운드에 대한 상태 데이터 엘리먼트 gi의 합을 나타낸다. 패킹된 데이터는 또한 비트 [95:64]에 저장되는 현재 라운드에 대한 상태 데이터 엘리먼트 di 및 비트 [127:96]에 저장되는 현재 라운드에 대한 상태 데이터 엘리먼트 ci를 포함한다. 소스에서의 이러한 특정 순서가 요구되는 것은 아니다.
제2 소스는 4개의 32 비트 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)을 포함하는 제2 128 비트 패킹된 데이터를 갖는다. 도시된 실시예에서, ai는 비트 [127:96]에 저장되고, bi는 비트 [95:64]에 저장되고, ei는 비트 [63:32]에 저장되며, fi는 비트 [31:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
SHA2 실행 로직(712B)은 명령어에 응답하여 목적지(718B)에 128 비트 패킹된 데이터 결과를 저장하도록 동작될 수 있다. 일부 실시예들에서, 이러한 결과는, 각각, 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 SHA2 해시 알고리즘의 2 라운드들 만큼 업데이트된, 4개의 업데이트된 상태 데이터 엘리먼트들(ai+2, bi+2, ei+2 및 fi + 2)을 포함한다. 도시된 실시예에서, ai +2는 비트 [127:96]에 저장되고, bi +2는 비트 [95:64]에 저장되고, ei +2는 비트 [63:32]에 저장되며, fi +2는 비트 [31:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다. 기타 실시예들은 2 라운드들 대신 단일 라운드 만큼, 또는 2 라운드들보다 많이 상태 엘리먼트들을 업데이트할 수 있다.
위에 논의된 바와 같이, 현재 라운드 상태 변수들(ai, bi, ei 및 fi)은, 각각, 라운드 i+2 상태 변수들(ci +2, di +2, gi +2 및 hi + 2)과 등가이다. 현재 라운드 상태 변수들(ai, bi, ei 및 fi)은 제2 소스에 저장된다. 유리하게도, 라운드 i+2 상태 변수들(ci+2, di +2, gi +2 및 hi + 2)은 별도로 계산될 필요가 없다. 오히려, 현재 라운드 상태 변수들(ai, bi, ei 및 fi)은 라운드 i+2 상태 변수들(ci +2, di +2, gi +2 및 hi + 2)로서 그대로 사용될 수 있다. 예를 들어, 제2 소스에서 현재 라운드 상태 변수들(ai, bi, ei 및 fi)은 목적지에서의 결과와 조합되어, 2 라운드들 만큼 모두 업데이트된 8개의 업데이트된 상태 데이터 엘리먼트들의 완전한 세트를 제공할 수 있다.
유리하게도, 이러한 명령어들은, 메시지 및 상수 입력들을 생성하여 덧셈하는 일부 연산들(예를 들어, W(i) + K(i)) 등을 제외하고, 2개 명령어들을 실행함으로써 SHA2 알고리즘의 모든 8개 상태 엘리먼트들의 값을 2 라운드만큼 업데이트할 수 있게 해준다. 일부 실시예들에서, 이러한 명령어들 양자 모두는 라운드 당 약 3 사이클들 정도로 실행할 수 있지만, 본 발명의 범위가 이에 제한되는 것은 아니다. 상태 엘리먼트들(ai, bi, ei 및 fi)의 신규한 배치는 이러한 점에서 도움이 된다. 또한, 2개의 소스들만이 명시될 필요가 있다. 더욱이, 레지스터들은 SHA2 알고리즘의 상태 엘리먼트들의 조합에 의한 것의 1/2이 될 수 있다. 이렇게 더 적은 레지스터들 및 관련된 실행 폭들의 사용은, 2배의 레지스터 및 실행 폭을 사용하는 것에 비해, 일반적으로 프로세서들 또는 집적 회로들의 비용 및 전력 소비를 감소시키는데 도움을 준다. 이는 이러한 명령어들의 구현을 저 비용 및/또는 모바일 또는 배터리 전력형 전자 디바이스들에 유용하게 하는 경향이 있을 수 있다.
이하에는, 일부 실시예들에서, SHA2_IN 및 SHA2-RNDS2 명령어들을 사용할 수 있는 의사코드(pseudocode)가 열거되며, 여기서 WKi=W(i)+K(i)이다:
Figure pat00002
도 8a-c는, SHA2 해시 알고리즘의 2 라운드들에 의해 상태 데이터 엘리먼트들(ai, bi, ci, di, ei, fi, gi 및 hi)로부터 업데이트된, 모든 8개의 업데이트된 상태 데이터 엘리먼트들(ai +2, bi +2, ci +2, di +2, ei +2, fi +2, gi +2 및 hi + 2)를 생성하도록 동작될 수 있는 상보형 세트의 3개의 명령어들의 동작들을 도시한다. 이러한 3개의 명령어들 각각은 2개의 소스 오퍼랜드들만을 사용한다. 이러한 명령어들은, SHA2 해시 알고리즘의 8개 32 비트 상태 데이터 엘리먼트들의 조합된 비트 폭(즉, 256 비트)의 1/2인 비트 폭(즉, 128 비트)을 갖는 128 비트 패킹된 데이터 및/또는 레지스터들을 사용한다. 다른 실시예들에서는, 256 비트 패킹된 데이터 및/또는 레지스터들을 사용하여 512 비트의 조합된 상태를 갖는 SHA2 알고리즘들에 대해 유사한 세트의 3개의 명령어들이 사용될 수 있다.
도 8a는 SHA2 입력 명령어(SHA2_in)의 일 실시예에 의해 수행되는 연산(840)의 블럭도이다. 이러한 명령어는, 제1 소스(814A)를 명시하거나 또는 다른 방식으로 표시하고, 제2 소스(816A)를 명시하거나 또는 다른 방식으로 표시하고, 목적지(818A)를 명시하거나 또는 다른 방식으로 표시한다. 일부 실시예들에서, 제1 소스, 제2 소스 및 목적지는 128 비트 레지스터들 또는 기타 저장 장소들일 수 있다. 제1 소스는 4개의 32 비트 데이터 엘리먼트들(ei, fi, gi 및 hi)을 포함하는 제1 128 비트 패킹된 데이터를 갖는다. 예를 들어, 도면에서, hi는 비트 [31:0]에 저장되고, gi는 비트 [63:32]에 저장되고, fi는 비트 [95:64]에 저장되며, ei는 비트 [127:96]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
제2 소스는 SHA2 알고리즘의 2 라운드들(즉, 현재 라운드 및 현재 라운드 이후 1 라운드)에 대한 메시지 및 상수 입력들을 나타내는 2개의 32 비트 상태 데이터 엘리먼트들을 포함하는 제2 패킹된 데이터를 갖는다. 도시된 바와 같이, 일부 실시예들에서, 제2 소스 및/또는 제2 패킹된 데이터는, 그 비트들의 1/2(예를 들어, 상위 1/2)이 무정의(don't care) 값들(*)이고 나머지 1/2이 2개의 32 비트 데이터 엘리먼트들을 보유하는 128비트일 수 있다. 대안적으로, 64 비트 소스들 및/또는 패킹된 데이터가 사용될 수 있다. 도시된 실시예에서, 현재 라운드에 대한 메시지 입력 W(i) 더하기 현재 라운드에 대한 상수 입력 K(i)를 나타내는 제1 데이터 엘리먼트는 [31:0]에 저장되고, 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)를 나타내는 제2 데이터 엘리먼트는 [63:32]에 저장된다. 다른 실시예에서, W(i), W(i+1), K(i) 및 K(i+1) 각각은 제2 패킹된 데이터의 4개 데이터 엘리먼트들에 각각 저장될 수 있다.
SHA2 실행 로직(812A)은 명령어에 응답하여 목적지에 128 비트 패킹된 데이터 결과를 저장하도록 동작될 수 있다. 일부 실시예들에서, 이러한 결과는 4개의 결과 데이터 엘리먼트들을 포함한다. 도시된 실시예에서, 제1 결과 데이터 엘리먼트(Y)는 비트 [31:0]에 저장된다. 제1 결과 데이터 엘리먼트(Y)는, 현재 라운드에 대한 메시지 입력 W(i) 더하기 현재 라운드에 대한 상수 입력 K(i)(즉, W(i) + K(i)) 더하기 현재 라운드에 대한 상태 데이터 엘리먼트 hi 더하기 현재 라운드에 대한 상태 엘리먼트들(ei, fi 및 gi)을 갖는 Ch 함수의 값(즉, Ch(ei, fi, gi)) 더하기 현재 라운드에 대한 상태 엘리먼트(ei)를 갖는 시그마1 함수의 값(즉, ∑1(ei))의 합을 나타낸다.
제2 결과 데이터 엘리먼트(X)는 비트 [63:32]에 저장된다. 제2 결과 데이터 엘리먼트(X)는, 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)(즉, W(i+1) + K(i+1)) 더하기 현재 라운드에 대한 상태 데이터 엘리먼트 gi의 합을 나타낸다. 이러한 결과는 또한 비트 [95:64]에 저장되는 현재 라운드에 대한 상태 데이터 엘리먼트(fi) 및 비트 [127:96]에 저장되는 현재 라운드에 대한 상태 데이터 엘리먼트(ei)를 포함한다. 목적지에서의 이러한 특정 순서가 요구되는 것은 아니다. 일부 실시예들에서는, 제1 소스가 목적지로서 재사용되고, 결과의 데이터 엘리먼트들(ei, fi, X, Y)은 제1 소스의 데이터 엘리먼트들(ei, fi, gi 및 hi)를 덮어쓰지만, 이것이 요구되는 것은 아니다.
도 8b는 SHA2 2 라운드 로우 업데이트 명령어(SHA2_LO)의 일 실시예에 의해 수행되는 연산(830B)의 블럭도이다. 이러한 명령어는 제1 소스(814B)를 명시하거나 또는 다른 방식으로 표시하고, 제2 소스(816B)를 명시하거나 또는 다른 방식으로 표시하고, 목적지(818B)를 명시하거나 또는 다른 방식으로 표시한다. 일부 실시예들에서, 제1 소스, 제2 소스 및 목적지는 128 비트 레지스터들 또는 기타 저장 장소들일 수 있다.
제1 소스는 4개의 32 비트 데이터 엘리먼트들을 포함하는 제1 128 비트 패킹된 데이터를 갖는다. 일부 실시예들에서, 제1 128 비트 패킹된 데이터는 도 8a의 SHA2 입력 명령어의 결과와 동등하거나 또는 동일할 수 있다. 일부 실시예들에서, 도 8a의 SHA2 입력 명령어의 목적지(818A)는 도 8b의 SHA2 2 라운드 로우 명령어의 제1 소스(814B)로서 표시될 수 있다. 도면에 도시된 바와 같이, 제1 소스는 비트 [31:0]에 저장되는 제1 데이터 엘리먼트(Y)를 포함한다. 제1 데이터 엘리먼트(Y)는, 현재 라운드에 대한 메시지 입력 W(i) 더하기 현재 라운드에 대한 상수 입력 K(i)(즉, W(i) + K(i)) 더하기 현재 라운드에 대한 상태 데이터 엘리먼트 hi 더하기 현재 라운드에 대한 상태 엘리먼트들(ei, fi 및 gi)을 갖는 Ch 함수의 값(즉, Ch(ei, fi, gi)) 더하기 현재 라운드에 대한 상태 엘리먼트(ei)를 갖는 시그마1 함수의 값(즉, ∑1(ei))의 합을 나타낸다. 제2 데이터 엘리먼트(X)는 비트 [63:32]에 저장된다. 제2 데이터 엘리먼트(X)는, 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)(즉, W(i+1) + K(i+1)) 더하기 현재 라운드에 대한 상태 데이터 엘리먼트 gi의 합을 나타낸다. 제1 소스는 또한 비트 [95:64]에 저장되는 현재 라운드에 대한 상태 데이터 엘리먼트 fi 및 비트 [127:96]에 저장되는 현재 라운드에 대한 상태 데이터 엘리먼트 ei를 포함한다. 제1 소스에서의 이러한 특정 순서가 요구되는 것은 아니다.
제2 소스는 4개의 32 비트 상태 데이터 엘리먼트들(ai, bi, ci 및 di)을 포함하는 제2 128 비트 패킹된 데이터를 갖는다. 도시된 실시예에서, ai는 비트 [127:96]에 저장되고, bi는 비트 [95:64]에 저장되고, ci는 비트 [63:32]에 저장되며, di는 비트 [31:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
SHA2 실행 로직(812B)은 명령어에 응답하여 목적지(818B)에 128 비트 패킹된 데이터 결과를 저장하도록 동작될 수 있다. 일부 실시예들에서, 이러한 결과는, 각각, 대응하는 상태 데이터 엘리먼트들(ei, fi, gi 및 hi)로부터 SHA2 해시 알고리즘의 2 라운드들 만큼 업데이트된, 4개의 업데이트된 상태 데이터 엘리먼트들(ei+2, fi+2, gi+2 및 hi + 2)을 포함한다. 도시된 실시예에서, ei +2는 비트 [127:96]에 저장되고, fi +2는 비트 [95:64]에 저장되고, gi +2는 비트 [63:32]에 저장되며, hi +2는 비트 [31:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다. 기타 실시예들은 2 라운드들 대신 단일 라운드 만큼, 또는 2 라운드들보다 많이 상태 엘리먼트들을 업데이트할 수 있다.
도 8c는 SHA2 2 라운드 하이 업데이트 명령어(SHA2_HI)의 일 실시예에 의해 수행되는 연산(830C)의 블럭도이다. 이러한 명령어는 제1 소스(814C)를 명시하거나 또는 다른 방식으로 표시하고, 제2 소스(816C)를 명시하거나 또는 다른 방식으로 표시하고, 목적지(818C)를 명시하거나 또는 다른 방식으로 표시한다. 일부 실시예들에서, 제1 소스, 제2 소스 및 목적지는 128 비트 레지스터들 또는 기타 저장 장소들일 수 있다.
제1 소스는 4개의 32 비트 데이터 엘리먼트들(ai, bi, ci 및 di)을 포함하는 제1 128 비트 패킹된 데이터를 갖는다. 도시된 실시예에서, ai는 비트 [127:96]에 저장되고, bi는 비트 [95:64]에 저장되고, ci는 비트 [63:32]에 저장되며, di는 [31:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
제2 소스는 4개의 32 비트 엘리먼트들을 포함하는 제2 128 비트 패킹된 데이터를 갖는다. 일부 실시예들에서, 제2 128 비트 패킹된 데이터는 도 8a의 SHA2 입력 명령어의 결과와 동등하거나 또는 동일할 수 있다. 일부 실시예들에서, 도 8a의 SHA2 입력 명령어의 목적지(818A)는 도 8c의 SHA2 2 라운드 하이 명령어의 제2 소스(816C)로서 표시될 수 있다. 도면에 도시된 바와 같이, 제2 소스는 비트 [31:0]에 저장되는 제1 데이터 엘리먼트(Y)를 포함한다. 제1 데이터 엘리먼트(Y)는, 현재 라운드에 대한 메시지 입력 W(i) 더하기 현재 라운드에 대한 상수 입력 K(i)(즉, W(i) + K(i)) 더하기 현재 라운드에 대한 상태 데이터 엘리먼트 hi 더하기 현재 라운드에 대한 상태 엘리먼트들(ei, fi 및 gi)을 갖는 Ch 함수의 값(즉, Ch(ei, fi, gi)) 더하기 현재 라운드에 대한 상태 엘리먼트(ei)를 갖는 시그마1 함수의 값(즉, ∑1(ei))의 합을 나타낸다. 제2 데이터 엘리먼트(X)는 비트 [63:32]에 저장된다. 제2 데이터 엘리먼트(X)는, 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)(즉, W(i+1) + K(i+1)) 더하기 현재 라운드에 대한 상태 데이터 엘리먼트 gi의 합을 나타낸다. 제2 소스는 또한 비트 [95:64]에 저장되는 현재 라운드에 대한 상태 데이터 엘리먼트 fi 및 비트 [127:96]에 저장되는 현재 라운드에 대한 상태 데이터 엘리먼트 ei를 포함한다. 제2 소스에서의 이러한 특정 순서가 요구되는 것은 아니다.
SHA2 실행 로직(812C)은 명령어에 응답하여 목적지(818C)에 128 비트 패킹된 데이터 결과를 저장하도록 동작될 수 있다. 일부 실시예들에서, 이러한 결과는, 각각, 대응하는 상태 데이터 엘리먼트들(ai, bi, ci 및 di)로부터 SHA2 해시 알고리즘의 2 라운드들 만큼 업데이트된, 4개의 업데이트된 상태 데이터 엘리먼트들(ai+2, bi+2, ci+2 및 di + 2)을 포함한다. 도시된 실시예에서, ai +2는 비트 [127:96]에 저장되고, bi +2는 비트 [95:64]에 저장되고, ci +2는 비트 [63:32]에 저장되며, di +2는 비트 [31:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다. 기타 실시예들은 2 라운드들 대신 단일 라운드 만큼, 또는 2 라운드들보다 많이 상태 엘리먼트들을 업데이트할 수 있다.
일부 실시예들에서, SHA2 입력 명령어, SHA2 업데이트 로우 명령어 및 SHA2 업데이트 하이 명령어의 실행은 총 약 6 사이클들 또는 라운드당 3 사이클들 정도로 SHA2 알고리즘의 2 라운드들을 완료할 수 있다. 일 양상에서, SHA2 입력 명령어는 후속하는 약 3 사이클 파이프라인에서 SHA2 업데이트 로우 및 SHA2 업데이트 하이 명령어들이 뒤따르는 약 3 사이클들의 파이프라인에서 먼저 수행될 수 있다. 업데이트 명령어들 중 하나는 다른 것의 실행 내에 효과적으로 숨겨질 수 있다(예를 들어, 1 사이클만큼 다른 것을 뒤따름).
2개 소스 오퍼랜드들만을 표시하는 명령어들의 실시예들이 설명되었다. 다른 실시예들은 3개 소스 오퍼랜드들을 표시하는 명령어들에 관련된다. 일부 실시예들에서, 이러한 3개 소스 오퍼랜드들 각각은 SHA2 해시 알고리즘의 8개 상태 엘리먼트들의 조합된 폭의 기껏해야 1/2 비트 폭인 패킹된 데이터를 갖는다.
도 9는 SHA2 128 비트 데이터 2 라운드 명령어(SHA256_2RND)의 일 실시예에 의해 수행되는 연산(930)의 블럭도이다. 이러한 명령어는 제1 소스(914)를 명시하거나 또는 다른 방식으로 표시하고, 제2 소스(916)를 명시하거나 또는 다른 방식으로 표시하고, 제3 소스(944)를 명시하거나 또는 다른 방식으로 표시하며, 목적지(918)를 명시하거나 또는 다른 방식으로 표시한다. 일부 실시예들에서는, 제1 소스, 제2 소스 및 제3 소스 중 하나가 목적지로서 재사용된다. 일부 실시예들에서는, 제1 소스, 제2 소스, 가능하게는 제3 소스 및 목적지가 128 비트 레지스터들 또는 기타 저장소 위치들일 수 있다.
제1 소스는 4개의 32 비트 상태 데이터 엘리먼트들(ci, di, gi 및 hi)를 포함하는 제1 128 비트 패킹된 데이터를 갖는다. 예를 들어, 도면에서 hi는 비트 [31:0]에 저장되고, gi는 비트 [63:32]에 저장되고, di는 비트 [95:64]에 저장되며, ci는 비트 [127:96]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
제2 소스는 4개의 32 비트 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)를 포함하는 제2 128 비트 패킹된 데이터를 갖는다. 예를 들어, 도면에서 fi는 비트 [31:0]에 저장되고, ei는 비트 [63:32]에 저장되고, bi는 비트 [95:64]에 저장되며, ai는 비트 [127:96]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
제3 소스는 SHA2 알고리즘의 2 라운드들(즉, 현재 라운드 및 현재 라운드 이후 1 라운드)에 대한 메시지 및 상수 입력들을 나타내는 2개의 32 비트 데이터 엘리먼트들을 포함하는 제3 패킹된 데이터를 갖는다. 도시된 바와 같이, 일부 실시예들에서, 제3 소스 및/또는 제3 패킹된 데이터는, 그 비트들의 1/2(예를 들어, 상위 1/2)이 무정의(don't care) 값들(*)이고 나머지 1/2이 2개의 32 비트 데이터 엘리먼트들을 보유하는 128비트일 수 있다. 대안적으로, 이러한 데이터는 상이하게 배치될 수 있다. 다른 옵션으로서, 2개의 32 비트 데이트 엘리먼트들을 갖는 64 비트 소스들 및/또는 패킹된 데이터가 사용될 수 있다. 도시된 실시예에서, 현재 라운드에 대한 메시지 입력 W(i) 더하기 현재 라운드에 대한 상수 입력 K(i)를 나타내는 제1 데이터 엘리먼트는 [31:0]에 저장되고, 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)를 나타내는 제2 데이터 엘리먼트는 [63:32]에 저장된다. 다른 실시예에서, W(i), W(i+1), K(i) 및 K(i+1) 각각은 128 비트 패킹된 데이터의 4개의 32 비트 데이터 엘리먼트들 중 상이한 것에 저장될 수 있다.
SHA2 실행 로직(912)은 명령어에 응답하여 목적지(918)에 128 비트 패킹된 데이터 결과를 저장하도록 동작될 수 있다. 일부 실시예들에서, 이러한 결과는, 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 각각 SHA2 해시 알고리즘의 2 라운드만큼 업데이트된, 4개의 업데이트된 상태 데이터 엘리먼트들(ai+2, bi+2, ei+2 및 fi + 2)을 포함한다. 도시된 실시예에서, ai +2는 비트 [127:96]에 저장되고, bi+2는 비트 [95:64]에 저장되고, ei +2는 비트 [63:32]에 저장되며, fi +2는 비트 [31:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다. 기타 실시예들은 2 라운드들 대신 단일 라운드 만큼, 또는 2 라운드들보다 많이(예를 들어, 4 라운드들) 상태 엘리먼트들을 업데이트할 수 있다.
도 10은 SHA2 256 비트 데이터 2 라운드 명령어(SHA512RNDS2)의 일 실시예에 의해 수행되는 연산(1030)의 블럭도이다. 이러한 명령어/연산은, 이들이 상태가 2배(즉, 256 비트의 상태 대신 512 비트의 상태)인 SHA2 알고리즘들에 대한 것이고, 2배 큰(즉, 32 비트 대신 64 비트) 상태 엘리먼트들 및 메시지와 상수 입력들에 대해 연산하며, 2배 큰(즉 128 비트 대신 256 비트) 패킹된 데이터를 사용한다는 점을 제외하고는 도 9의 것들과 유사하다.
이러한 명령어는, 제1 소스(1014)를 명시하거나 또는 다른 방식으로 표시하고, 제2 소스(1016)를 명시하거나 또는 다른 방식으로 표시하고, 제3 소스(1044)를 명시하거나 또는 다른 방식으로 표시하며, 목적지(1018)를 명시하거나 또는 다른 방식으로 표시한다. 일부 실시예들에서는, 제1 소스, 제2 소스 및 제3 소스 중 하나가 목적지로서 재사용된다. 일부 실시예들에서는, 제1 소스, 제2 소스, 가능하게는 제3 소스 및 목적지가 256 비트 레지스터들 또는 기타 저장소 위치들일 수 있다.
제1 소스는 4개의 64 비트 상태 데이터 엘리먼트들(ci, di, gi 및 hi)를 포함하는 제1 256 비트 패킹된 데이터를 갖는다. 예를 들어, 도면에서 hi는 비트 [63:0]에 저장되고, gi는 비트 [127:64]에 저장되고, di는 비트 [191:128]에 저장되며, ci는 비트 [255:192]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
제2 소스는 4개의 64 비트 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)를 포함하는 제2 256 비트 패킹된 데이터를 갖는다. 예를 들어, 도면에서 fi는 비트 [63:0]에 저장되고, ei는 비트 [127:64]에 저장되고, bi는 비트 [191:128]에 저장되며, ai는 비트 [255:192]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
제3 소스는 SHA2 알고리즘의 2 라운드들(즉, 현재 라운드 및 현재 라운드 이후 1 라운드)에 대한 메시지 및 상수 입력들을 나타내는 2개의 64 비트 상태 데이터 엘리먼트들을 포함하는 제3 패킹된 데이터를 갖는다. 도시된 바와 같이, 일부 실시예들에서, 제3 소스 및/또는 제3 패킹된 데이터는, 그 비트들의 1/2(예를 들어, 상위 1/2)이 무정의(don't care) 값들(*)이고 나머지 1/2이 2개의 64 비트 데이터 엘리먼트들을 보유하는 256비트일 수 있다. 대안적으로, 이러한 데이터는 상이하게 배치될 수 있다. 다른 옵션으로서, 2개의 64 비트 데이트 엘리먼트들을 갖는 128 비트 소스들 및/또는 패킹된 데이터가 사용될 수 있다. 도시된 실시예에서, 현재 라운드에 대한 메시지 입력 W(i) 더하기 현재 라운드에 대한 상수 입력 K(i)를 나타내는 제1 데이터 엘리먼트는 [63:0]에 저장되고, 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)를 나타내는 제2 데이터 엘리먼트는 [127:64]에 저장된다. 다른 실시예에서, W(i), W(i+1), K(i) 및 K(i+1) 각각은 256 비트 패킹된 데이터의 4개의 64 비트 데이터 엘리먼트들 중 상이한 것에 저장될 수 있다.
SHA2 실행 로직(1012)은 명령어에 응답하여 목적지(1018)에 256 비트 패킹된 데이터 결과를 저장하도록 동작될 수 있다. 일부 실시예들에서, 이러한 결과는, 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 각각 SHA2 해시 알고리즘의 2 라운드만큼 업데이트된, 4개의 업데이트된 64 비트 상태 데이터 엘리먼트들(ai+2, bi+2, ei+2 및 fi + 2)을 포함한다. 도시된 실시예에서, ai +2는 비트 [255:192]에 저장되고, bi +2는 비트 [191:128]에 저장되고, ei +2는 비트 [127:64]에 저장되며, fi+2는 비트 [63:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다. 기타 실시예들은 2 라운드들 대신 단일 라운드 만큼, 또는 2 라운드들보다 많이(예를 들어, 4 라운드들) 상태 엘리먼트들을 업데이트할 수 있다.
도 9-10은 하나의 소스에서 상태 변수들(ai, bi, ei 및 fi)의 신규한 배치를 활용한다. 위에 논의된 바와 같이, 현재 라운드 상태 변수들(ai, bi, ei 및 fi)은, 각각, 라운드 i+2 상태 변수들(ci +2, di +2, gi +2 및 hi + 2)과 등가이다. 현재 라운드 상태 변수들(ai, bi, ei 및 fi)은 제2 소스에 저장된다. 유리하게도, 라운드 i+2 상태 변수들(ci+2, di +2, gi +2 및 hi + 2)은 별도로 계산될 필요가 없다. 오히려, 현재 라운드 상태 변수들(ai, bi, ei 및 fi)은 라운드 i+2 상태 변수들(ci +2, di +2, gi +2 및 hi + 2)로서 그대로 사용될 수 있다. 예를 들어, 제2 소스에서 현재 라운드 상태 변수들(ai, bi, ei 및 fi)은 목적지에서의 결과와 조합되어, 2 라운드들 만큼 모두 업데이트된 8개의 업데이트된 상태 데이터 엘리먼트들의 완전한 세트를 제공할 수 있다. 다른 예로서, 후속 명령어는, 제2 소스에서 현재 라운드 상태 변수들(ai, bi, ei 및 fi)이 라운드 i+2 상태 변수들(ci +2, di +2, gi +2 및 hi + 2)인 것처럼 제2 소스에서 현재 라운드 상태 변수들(ai, bi, ei 및 fi)을 나타낼 수 있고, 이들은 이와 같이 처리되어, 예를 들어, 라운드 i+4 등을 생성하도록 사용될 수 있다.
유리하게도, 이러한 명령어/연산은, 메시지 및 상수 입력들을 생성하여 덧셈하는 일부 연산들(예를 들어, W(i) + K(i)) 등을 제외하고, 단일 명령어들을 실행함으로써 SHA2 알고리즘의 모든 8개 상태 엘리먼트들의 값을 2 라운드만큼 업데이트할 수 있게 해준다. 상태 엘리먼트들(ai, bi, ei 및 fi)의 신규한 배치는 이러한 점에서 도움이 된다. 또한, 레지스터들은 SHA2 알고리즘의 상태 엘리먼트들의 조합에 의한 것의 1/2이 될 수 있다. 이렇게 더 적은 레지스터들 및 관련된 실행 폭들의 사용은, 2배의 레지스터 및 실행 폭을 사용하는 것에 비해, 일반적으로 프로세서들 또는 집적 회로들의 비용 및 전력 소비를 감소시키는데 도움을 준다. 이는 이러한 명령어들의 구현을 저 비용 및/또는 모바일 또는 배터리 전력형 전자 디바이스들에 유용하게 하는 경향이 있을 수 있다.
도 11은 SHA2 128 비트 데이터 4 라운드 명령어(SHA256_4RND)의 일 실시예에 의해 수행되는 연산(1130)의 블럭도이다. 이러한 명령어는 제1 소스(1114)를 명시하거나 또는 다른 방식으로 표시하고, 제2 소스(1116)를 명시하거나 또는 다른 방식으로 표시하고, 제3 소스(1144)를 명시하거나 또는 다른 방식으로 표시하고, 제1 목적지(1118A)를 명시하거나 또는 다른 방식으로 표시하며, 제2 목적지(1118B)를 명시하거나 또는 다른 방식으로 표시한다. 일부 실시예들에서는, 이러한 소스들 중 하나가 제1 목적지로서 재사용되고, 이러한 소스들 중 다른 하나가 제2 목적지로서 재사용된다. 일부 실시예들에서는, 제1 소스, 제2 소스, 제3 소스 및 목적지가 128 비트 레지스터들 또는 기타 저장소 위치들일 수 있다.
제1 소스는 4개의 32 비트 상태 데이터 엘리먼트들(ci, di, gi 및 hi)를 포함하는 제1 128 비트 패킹된 데이터를 갖는다. 예를 들어, 도면에서 hi는 비트 [31:0]에 저장되고, gi는 비트 [63:32]에 저장되고, di는 비트 [95:64]에 저장되며, ci는 비트 [127:96]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
제2 소스는 4개의 32 비트 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)를 포함하는 제2 128 비트 패킹된 데이터를 갖는다. 예를 들어, 도면에서 fi는 비트 [31:0]에 저장되고, ei는 비트 [63:32]에 저장되고, bi는 비트 [95:64]에 저장되며, ai는 비트 [127:96]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
제3 소스는 SHA2 알고리즘의 4 라운드들(즉, 현재 라운드(i), 현재 라운드 이후 1 라운드(i+1), 현재 라운드 이후 2 라운드(i+2) 및 현재 라운드 이후 3 라운드(i+3))에 대한 메시지 및 상수 입력들을 나타내는 4개의 32 비트 데이터 엘리먼트들을 포함하는 제3 128 비트 패킹된 데이터를 갖는다. 도시된 실시예에서, 현재 라운드에 대한 메시지 입력 W(i) 더하기 현재 라운드에 대한 상수 입력 K(i)를 나타내는 제1 데이터 엘리먼트는 [31:0]에 저장되고, 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)를 나타내는 제2 데이터 엘리먼트는 [63:32]에 저장된다. 계속해서, 현재 라운드 이후 2 라운드에 대한 메시지 입력 W(i+2) 더하기 현재 라운드 이후 2 라운드에 대한 상수 입력 K(i+2)를 나타내는 제3 데이터 엘리먼트는 [63:32]에 저장되고, 현재 라운드 이후 3 라운드에 대한 메시지 입력 W(i+3) 더하기 현재 라운드 이후 3 라운드에 대한 상수 입력 K(i+3)를 나타내는 제4 데이터 엘리먼트는 [63:32]에 저장된다. 다른 실시예들에서, 이러한 데이터는 상이하게 배치될 수 있다.
SHA2 실행 로직(1112)은, 명령어에 응답하여, 명령어에 의해 표시되는 제1 목적지(1118A)에 제1 128 비트 패킹된 데이터 결과를 저장하고, 명령어에 의해 표시되는 제2 목적지(1118B)에 제2 128 비트 패킹된 데이터 결과를 저장하도록 동작될 수 있다. 일부 실시예들에서, 제1 128 비트 패킹된 데이터 결과는, 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 각각 SHA2 해시 알고리즘의 2 라운드만큼 업데이트된, 4개의 업데이트된 상태 데이터 엘리먼트들(ai+2, bi+2, ei+2 및 fi+2)을 포함한다. 도시된 실시예에서, ai +2는 비트 [127:96]에 저장되고, bi +2는 비트 [95:64]에 저장되고, ei +2는 비트 [63:32]에 저장되며, fi +2는 비트 [31:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다. 일부 실시예들에서, 제2 128 비트 패킹된 데이터 결과는, 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 각각 SHA2 해시 알고리즘의 4 라운드만큼 업데이트된, 4개의 업데이트된 상태 데이터 엘리먼트들(ai+4, bi+4, ei+4 및 fi + 4)을 포함한다. 도시된 실시예에서, ai +4는 비트 [127:96]에 저장되고, bi +4는 비트 [95:64]에 저장되고, ei +4는 비트 [63:32]에 저장되며, fi +4는 비트 [31:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
일부 실시예들에서, 제1 128 비트 패킹된 데이터 결과는 2 라운드들이 완료된 이후(예를 들어, 명령어의 실행을 통해 약 절반) 제1 목적지에 저장될 수 있고, 제2 128 비트 패킹된 데이터 결과는 4 라운드들이 완료된 이후(예를 들어, 거의 완전히 명령어의 실행을 통해) 제2 목적지에 저장될 수 있다.
제1 목적지(1118A)에 저장되는 2 라운드들 이후 상태 변수들(ai +2, bi +2, ei +2 및 fi + 2)은, 각각 4 라운드들 이후 상태 변수들(ci +4, di +4, gi +4 및 hi + 4)과 등가이다. 유리하게도, 4 라운드들 이후 상태 변수들(ci +4, di +4, gi +4 및 hi + 4)은 별도로 계산될 필요가 없다. 오히려, 제1 목적지에 저장되는 2 라운드들 이후 상태 변수들(ai +2, bi+2, ei +2 및 fi + 2)은 4 라운드들 이후 상태 변수들(ci +4, di +4, gi +4 및 hi + 4)로서 그대로 사용될 수 있다. 제1 목적지(1118A)에 저장되는 2 라운드들 이후 상태 변수들(ai+2, bi +2, ei +2 및 fi + 2)은, 제2 목적지(1118B)에 저장되는 4 라운드들 이후 상태 변수들(ai+4, bi +4, ei +4 및 fi + 4)과 조합되어, SHA2 알고리즘의 4 라운드들 만큼 각각 업데이트된 8개의 업데이트된 상태 엘리먼트들의 세트를 취득할 수 있다. 일부 실시예들에서, 제1 소스는 제1 목적지로서 재사용될 수 있고, 제2 소스는 제2 목적지로서 재사용될 수 있지만, 이러한 것이 요구되는 것은 아니다.
도 12는 SHA2 512 비트 데이터 4 라운드 명령어(SHA512RNDS4)의 일 실시예에 의해 수행되는 연산(1230)의 블럭도이다. 이러한 명령어/연산은, 이들이 상태가 2배(즉, 256 비트의 상태 대신 512 비트의 상태)인 SHA2 알고리즘들에 대한 것이고, 2배 큰(즉, 32 비트 대신 64 비트) 상태 엘리먼트들 및 메시지와 상수 입력들에 대해 연산하며, 2배 큰(즉 128 비트 대신 256 비트) 패킹된 데이터를 사용한다는 점을 제외하고는 도 11의 것들과 유사하다.
이러한 명령어는 제1 소스(1214)를 명시하거나 또는 다른 방식으로 표시하고, 제2 소스(1216)를 명시하거나 또는 다른 방식으로 표시하고, 제3 소스(1244)를 명시하거나 또는 다른 방식으로 표시하고, 제1 목적지(1218A)를 명시하거나 또는 다른 방식으로 표시하며, 제2 목적지(1218B)를 명시하거나 또는 다른 방식으로 표시한다. 일부 실시예들에서는, 이러한 소스들 중 하나가 제1 목적지로서 재사용되고, 이러한 소스들 중 다른 것이 제2 목적지로서 재사용된다. 일부 실시예들에서는, 이러한 소스들 및 목적지가 256 비트 레지스터들 또는 기타 저장소 위치들일 수 있다.
제1 소스는 4개의 64 비트 상태 데이터 엘리먼트들(ci, di, gi 및 hi)를 포함하는 제1 256 비트 패킹된 데이터를 갖는다. 예를 들어, 도면에서 hi는 비트 [63:0]에 저장되고, gi는 비트 [127:64]에 저장되고, di는 비트 [191:128]에 저장되며, ci는 비트 [255:192]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
제2 소스는 4개의 64 비트 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)를 포함하는 제2 256 비트 패킹된 데이터를 갖는다. 예를 들어, 도면에서 fi는 비트 [63:0]에 저장되고, ei는 비트 [127:64]에 저장되고, bi는 비트 [191:128]에 저장되며, ai는 비트 [255:192]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
제3 소스는 SHA2 알고리즘의 4 라운드들(즉, 현재 라운드(i), 현재 라운드 이후 1 라운드(i+1), 현재 라운드 이후 2 라운드(i+2) 및 현재 라운드 이후 3 라운드(i+3))에 대한 메시지 및 상수 입력들을 나타내는 4개의 64 비트 데이터 엘리먼트들을 포함하는 제3 256 비트 패킹된 데이터를 갖는다. 도시된 실시예에서, 현재 라운드에 대한 메시지 입력 W(i) 더하기 현재 라운드에 대한 상수 입력 K(i)를 나타내는 제1 데이터 엘리먼트는 [63:0]에 저장되고, 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)를 나타내는 제2 데이터 엘리먼트는 [127:64]에 저장된다. 계속해서, 현재 라운드 이후 2 라운드에 대한 메시지 입력 W(i+2) 더하기 현재 라운드 이후 2 라운드에 대한 상수 입력 K(i+2)를 나타내는 제3 데이터 엘리먼트는 [191:128]에 저장되고, 현재 라운드 이후 3 라운드에 대한 메시지 입력 W(i+3) 더하기 현재 라운드 이후 3 라운드에 대한 상수 입력 K(i+3)를 나타내는 제4 데이터 엘리먼트는 [255:192]에 저장된다. 다른 실시예들에서, 이러한 데이터는 상이하게 배치될 수 있다.
SHA2 실행 로직(1212)은, 명령어에 응답하여, 명령어에 의해 표시되는 제1 목적지(1218A)에 제1 256 비트 패킹된 데이터 결과를 저장하고, 명령어에 의해 표시되는 제2 목적지(1218B)에 제2 256 비트 패킹된 데이터 결과를 저장하도록 동작될 수 있다. 일부 실시예들에서, 제1 256 비트 패킹된 데이터 결과는, 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 각각 SHA2 해시 알고리즘의 2 라운드만큼 업데이트된, 4개의 업데이트된 상태 데이터 엘리먼트들(ai+2, bi+2, ei+2 및 fi+2)을 포함한다. 도시된 실시예에서, ai +2는 비트 [255:192]에 저장되고, bi +2는 비트 [191:128]에 저장되고, ei +2는 비트 [127:64]에 저장되며, fi +2는 비트 [63:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다. 일부 실시예들에서, 제2 128 비트 패킹된 데이터 결과는, 대응하는 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)로부터 각각 SHA2 해시 알고리즘의 4 라운드만큼 업데이트된, 4개의 업데이트된 상태 데이터 엘리먼트들(ai+4, bi+4, ei+4 및 fi + 4)을 포함한다. 도시된 실시예에서, ai+4는 비트 [255:192]에 저장되고, bi +4는 비트 [191:128]에 저장되고, ei +4는 비트 [127:64]에 저장되며, fi +4는 비트 [63:0]에 저장되지만, 이러한 특정 순서가 요구되는 것은 아니다.
일부 실시예들에서, 제1 128 비트 패킹된 데이터 결과는 2 라운드들이 완료된 이후(예를 들어, 명령어의 실행을 통해 약 절반) 제1 목적지에 저장될 수 있고, 제2 128 비트 패킹된 데이터 결과는 4 라운드들이 완료된 이후(예를 들어, 완전히 명령어의 실행을 통해) 제2 목적지에 저장될 수 있다.
제1 목적지(1218A)에 저장되는 2 라운드들 이후 상태 변수들(ai +2, bi +2, ei +2 및 fi + 2)은, 각각 4 라운드들 이후 상태 변수들(ci +4, di +4, gi +4 및 hi + 4)과 등가이다. 유리하게도, 4 라운드들 이후 상태 변수들(ci +4, di +4, gi +4 및 hi + 4)은 별도로 계산될 필요가 없다. 오히려, 제1 목적지에 저장되는 2 라운드들 이후 상태 변수들(ai +2, bi+2, ei +2 및 fi + 2)은 4 라운드들 이후 상태 변수들(ci +4, di +4, gi +4 및 hi + 4)로서 그대로 사용될 수 있다. 제1 목적지(1218A)에 저장되는 2 라운드들 이후 상태 변수들(ai+2, bi +2, ei +2 및 fi + 2)은, 제2 목적지(1218B)에 저장되는 4 라운드들 이후 상태 변수들(ai+4, bi +4, ei +4 및 fi + 4)과 조합되어, SHA2 알고리즘의 4 라운드들 만큼 각각 업데이트된 8개의 업데이트된 상태 엘리먼트들의 세트를 취득할 수 있다. 일부 실시예들에서, 제1 소스는 제1 목적지로서 재사용될 수 있고, 제2 소스는 제2 목적지로서 재사용될 수 있지만, 이러한 것이 요구되는 것은 아니다.
도 7-12는 적합한 명령어들/연산들의 몇몇 특정 실시예들을 도시한다. 그러나, 본 개시내용의 이점들을 갖는, 여러 다른 실시예들이 고려되고, 기술분야의 숙련된 자들에게 명백할 것이다. 예를 들어, 이러한 실시예들 각각에서, 소스들 및 목적지 내에서 데이터 엘리먼트들(예를 들어, 상태 엘리먼트들)의 특정 순서는 옵션으로 재배치될 수 있다. 예를 들어, 상태 엘리먼트들을 a, b, e, f의 순서로 저장하는 것보다는 오히려, 이들이, 예를 들어, f, e, b, a의 순서로, 또는 b, a, f, e의 순서로, 또는 임의의 기타 소망하는 순서로와 같이 임의의 기타 소망하는 순서로 저장될 수 있다. 다른 예로서, 128 비트 레지스터들을 사용하여 256 비트의 상태를 갖는 SHA2 알고리즘들에 대해 설명된 실시예들 중 임의의 것은, 또한 256 비트 레지스터들을 사용하여 512 비트의 상태를 갖는 SHA2 알고리즘들에 대해 사용될 수 있다. 이러한 실시예들 각각에서, 하나 이상의 소스들은 옵션으로 명백한 대신에 내재적일 수 있다. 이러한 실시예들 각각에서, 소스는 소스/목적지로서 사용될 수 있거나 또는 대안적으로 별도의 명시되거나 또는 표시된 목적지가 사용될 수 있다. 또한, 128 비트 또는 256 비트 저장소 위치들이 설명되었지만, 128 비트 또는 256 비트 패킹된 데이터를 저장하는 것이 바람직하다면, 더 큰 레지스터들 또는 기타 저장소 위치들이 사용될 수 있다.
위에 언급된 바와 같이, 이러한 연산들은 SHA-256에 대해서에 비해 SHA-512에 대해서 경미하게 상이하다. 이러한 알고리즘들에 대한 연산들이 기술분야에 잘 알려져 있고, SHS(Secure Hash Standard)(FIPS PUB 180-3)에 충분히 설명되지만, SHA-512에 대한 연산들의 세트는 다음과 같다:
Figure pat00003
Figure pat00004
도 13a는 적합한 명령어 포맷의 제1 실시예의 블럭도이다. 이러한 명령어 포맷은 연산 코드 또는 오피코드(1346A)를 포함한다. 이러한 오피코드는 수행될 명령어 및/또는 연산을 식별하도록 동작될 수 있는 복수의 비트들 또는 하나 이상의 필드들을 나타낼 수 있다. 이러한 명령어 포맷은 또한 제1 소스/목적지 명시자(1348A) 및 제2 소스 명시자(1350A)를 포함한다. 예를 들어, 이러한 명시자들 각각은 레지스터, 메모리 위치 또는 기타 저장소 위치를 명시하는 비트들 또는 하나 이상의 필드들을 포함할 수 있다. 제1 소스/목적지 명시자는 제1 소스 오퍼랜드를 가질 저장소 위치를 특정하기 위한 것이고, 동일한 명시된 저장소 위치가 또한 결과가 저장될 목적지로서 사용되기도 한다. 대안적으로, 다른 실시예에서, 제1 소스/목적지 및/또는 제2 소스 중 하나 이상은 명백하게 명시되는 대신에 명령어에 내재될 수 있다. 이러한 명령어 포맷은 2개의 소스들만을 명시하거나 또는 다른 방식으로 표시한다. 도 7-8에 대해 위에 도시되고 설명된 명령어들은 이러한 명령어 포맷들에 대해 매우 유용하다.
도 13b는 적합한 명령어 포맷의 제2 실시예의 블럭도이다. 이러한 명령어 포맷은 연산 코드 또는 오피코드(1346B), 제1 소스/목적지 명시자(1348B) 및 제2 소스 명시자(1350B)를 포함한다. 이들 각각은 제1 명령어 포맷의 것들과 유사하거나 또는 동일하다. 이러한 명령어 포맷은 또한 제3 소스 오퍼랜드가 저장되는 제3 소스 저장소 위치를 명시하는 옵션의 제3 소스 명시자(1352B)를 포함한다. 대안적으로, 제3 소스 저장소 위치는 명백하게 명시되는 대신에 명령어에 내재될 수 있다. 이러한 명령어 포맷은 3개의 소스들을 명시하거나 또는 다른 방식으로 표시한다. 도 9-10에 대해 위에 도시되고 설명된 명령어들은 이러한 명령어 포맷들에 대해 매우 유용하다.
도 13c는 적합한 명령어 포맷의 제3 실시예의 블럭도이다. 이러한 명령어 포맷은 연산 코드 또는 오피코드(1346C), 제1 소스/목적지 명시자(1348C), 제2 소스/목적지 명시자(1350C) 및 옵션의 제3 소스 명시자(1352C)를 포함한다. 이들 각각은 제2 소스 명시자가 목적지에 대해서도 사용된다는 점을 제외하고는 제2 명령어 포맷의 것들과 유사하거나 또는 동일하다. 이러한 명령어 포맷은 3개의 소스들 및 2개의 목적지들을 명시하거나 또는 다른 방식으로 표시한다. 도 11-12에 대해 위에 도시되고 설명된 명령어들은 이러한 명령어 포맷들에 대해 매우 유용하다. 위에 설명된 바와 같이, 일부 실시예들에서, 목적지들 중 하나는 2 라운드들 이후 명령어의 실행을 통해 약 절반에 기입될 수 있고, 나머지 목적지는 모든 4개 라운드들 이후 기입될 수 있다.
이들은 단지 몇몇 예시적인 실시예들이다. 다른 실시예들에서는 명시적 명시자들 중 하나가 그 대신 명령어에 내재적일 수 있다는 점이 이해되어야 한다. 대안적인 실시예들은, 이러한 명시자들의 서브세트를 포함할 수 있고, 추가적 필드들을 추가할 수 있고, 특정 필드들을 중첩할 수 있는 등등이다. 필드들의 도시된 순서/배치가 요구되는 것은 아니고, 오히려 필드들이 재배치될 수 있다. 필드들이 연속적인 시퀀스들의 비트를 포함할 필요는 없고 오히려 비연속적이거나 또는 분리된 비트들로 구성될 수 있다. 일부 실시예들에서, 명령어 포맷은 EVEX 인코딩 또는 명령어 포맷을 따를 수 있지만(예를 들어, SHA-512 알고리즘에 대한 3개 소스 필드들 및/또는 명령어들의 경우), 이러한 것이 요구되는 것은 아니다.
도 14는 패킹된 데이터 또는 벡터 레지스터들(1454)의 적합한 세트의 특정 예시적인 실시예의 블럭도이다. 패킹된 데이터 레지스터들은 ZMM0 내지 ZMM31로 레이블된 32개의 512 비트 패킹된 데이터 레지스터들을 포함한다. 도시된 실시예에서, 이러한 레지스터들 중 하위 16개, 즉 ZMM0-ZMM15의 하위 256-비트들은, YMM0-YMM15로 레이블된 각각의 256-비트 패킹된 데이터 레지스터들에 에일리어싱(aliased) 또는 중첩되지만, 이러한 것이 요구되는 것은 아니다. 마찬가지로, 도시된 실시예에서, YMM0-YMM15의 하위 128 비트는, XMM0-XMM15로 레이블된 개별 128 비트 패킹된 데이터 레지스터들에 대해 에일리어싱되거나 또는 중첩되지만, 이러한 것이 또한 요구되는 것은 아니다. 512 비트 레지스터들 ZMM0 내지 ZMM31은 512 비트 패킹된 데이터, 256 비트 패킹된 데이터 또는 128 비트 패킹된 데이터를 보유하도록 동작될 수 있다. 256 비트 레지스터들 YMM0-YMM15는 256 비트 패킹된 데이터 또는 128 비트 패킹된 데이터를 보유하도록 동작될 수 있다. 128-비트 레지스터들 XMM0-XMM1은 128-비트 패킹된 데이터를 보유하도록 동작될 수 있다. 적어도 8-비트 바이트 데이터, 16-비트 워드 데이터, 32-비트 더블워드 또는 단정밀도 부동 소수점 데이터, 및 64-비트 쿼드워드 또는 배정밀도 부동 소수점 데이터를 포함하는 상이한 데이터 엘리먼트 사이즈들이 지원된다. 패킹된 데이터 레지스터들의 대안적인 실시예들은 상이한 수들의 레지스터들, 상이한 사이즈들의 레지스터들을 포함할 수 있고, 더 작은 레지스터들에 더 큰 레지스터들을 에일리어스하거나 그렇지 않을 수 있거나, 또는 도시된 것과 상이하게 다른 방식일 수 있다(예를 들어, 2개 이상의 분명한 세트들의 레지스터들을 포함할 수 있음).
본 명세서의 설명들은 SHA2 알고리즘을 구현하고 SHA2 알고리즘들과 일치하는 해시들을 취득하려는 것이다. 표준에 의해 설명되는 것과 상이한 해시들에 이르게될 본 명세서의 임의의 불일치들(예를 들어, 오자들 또는 다른 방식으로 기인함)은 의도적인 것이 아니라 오류이며, 기술분야에 숙련된 자들은 이러한 표준이 옳고 이러한 오자들을 대체한다는 점을 이해할 것이다.
일부 실시예들은 본 명세서의 다른 곳에서 설명되는 명령어들 중 적어도 하나를 포함하는 머신-판독가능 저장 매체를 포함하는 제조 물품(예를 들어, 컴퓨터 프로그램 제품)에 관련된다. 본 명세서에 개시되는 명령어들 중 임의의 것은 적합하고 이러한 매체에 저장될 수 있다.
일부 실시예들에서, 머신-판독가능 저장 매체는 유형의 및/또는 비-일시적 머신-판독가능 저장 매체일 수 있다. 다양한 실시예들에서, 이러한 머신-판독가능 저장 매체는, 플로피 디스켓, 광학 디스크, CD-ROM, 자기 디스크, 광자기 디스크, ROM(Read Only Memory), PROM(Programmable ROM), EPROM(Erasable-and-Programmable ROM), EEPROM(Electrically-Erasable-and-Programmable ROM), RAM(Random Access Memory), SRAM(Static-RAM), DRAM(Dynamic-RAM), Flash 메모리, 상변화 메모리(phase-change memory), 반도체 메모리 또는 이들의 조합을 포함할 수 있다. 일부 실시예들에서, 이러한 매체는, 예를 들어, 반도체 데이터 저장 재료, 상변화 데이터 저장 재료, 자기 데이터 저장 재료, 광 고체 데이터 저장 재료 등과 같은 하나 이상의 고체 데이터 저장 재료들을 포함할 수 있다.
적합한 머신들의 예들은, 이에 제한되는 것은 아니지만, 프로세서들(예를 들어, 범용 프로세서들 및 특수-목적 프로세서들), 명령어 처리 장치, 및 하나 이상의 프로세서들을 갖는 전자 디바이스들 또는 명령어 처리 장치를 포함한다. 적합한 전자 디바이스들의 예들은, 이에 제한되는 것은 아니지만, 데스크톱 컴퓨터들, 랩톱 컴퓨터들, 노트북 컴퓨터들, 셀룰러 전화들, 핸드헬드 또는 모바일 컴퓨터들, 서버들, 네트워크 엘리먼트들, 셋-톱 박스들, 기타 타입들의 컴퓨터 시스템들 등을 포함한다.
명령어 세트는 하나 이상의 명령어 포맷들을 포함한다. 주어진 명령어 포맷은, 다양한 필드들(비트들의 수, 비트들의 위치)을 정의하여, 다른 것들 중에서, 수행될 연산(오피코드) 및 그 연산이 수행될 오퍼랜드(들)를 특정한다. 일부 명령어 포맷들은 명령어 템플릿들(또는 서브포맷들)의 정의를 통해 더 쪼개진다. 예를 들어, 주어진 명령어 포맷의 명령어 템플릿들은 상이한 서브세트들의 명령어 포맷의 필드들을 갖는 것으로 정의될 수 있고(포함된 필드들은 통상적으로 동일한 순서로 있지만, 적어도 일부는 더 적은 필드들이 포함되기 때문에 상이한 비트 위치들을 갖는다) 및/또는 주어진 필드가 상이하게 해석되는 것으로 정의될 수 있다. 따라서, ISA의 각 명령어는, 주어진 명령어 포맷(그리고, 정의되면, 그 명령어 포맷의 명령어 템플릿들 중 주어진 하나에서)을 사용하여 표현되고, 그 연산 및 오퍼랜드들을 특정하는 필드들을 포함한다. 예를 들어, 예시적 ADD 명령어는 특정 오피코드, 및 그 오피코드를 특정하기 위한 오피코드 필드 및 오퍼랜드들(소스1/목적지 및 소스2)을 선택하기 위한 오퍼랜드 필드들을 포함하는 명령어 포맷을 갖고; 명령어 스트림에서의 이런 ADD 명령어의 발생은 특정 오퍼랜드들을 선택하는 오퍼랜드 필드들에 특정 콘텐츠들을 가질 것이다. AVX(Advanced Vector Extensions)(AVX1 및 AVX2)라 하고 VEX(Vector Extensions) 코딩 스킴을 사용하는 SIMD 확장들의 세트가 발표 및/또는 공개되었다(예를 들어, "Intel® 64 and IA-32 Architectures Software Developers Manual, October 2011" 참조; 및 "Intel® Advanced Vector Extensions Programming Reference, June 2011" 참조).
예시적인 명령어 포맷들
본 명세서에 설명되는 명령어(들)의 실시예들은 상이한 포맷들로 구현될 수 있다. 또한, 예시적인 시스템들, 아키텍처들, 및 파이프라인들이 이하 상세히 설명된다. 명령어(들)의 실시예들은 이러한 시스템들, 아키텍처들 및 파이프라인들에서 실행될 수 있지만, 상세히 설명되는 것들에 제한되는 것은 아니다.
VEX 명령어 포맷
VEX 인코딩은 명령어들이 2개보다 많은 오퍼랜드를 가질 수 있게 하고, SIMD 벡터 레지스터들이 158 비트보다 더 길어지게 한다. VEX 프리픽스의 사용은 3개 오퍼랜드(또는 더 많은) 구문(syntax)을 제공한다. 예를 들어, 이전의 2개 오퍼랜드 명령어들은 소스 오퍼랜드를 덮어쓰는 A = A + B와 같은 연산들을 수행하였다. VEX 프리픽스의 사용은 오퍼랜드들이 A = B + C와 같은 비파괴적 연산(nondestructive operation)들을 수행할 수 있게 한다.
도 15a는 VEX 프리픽스(1502), 실제 오피코드 필드(real opcode field)(1530), Mod R/M 바이트(1540), SIB 바이트(1550), 변위 필드(displacement field)(1562), 및 IMM8(1572)를 포함하는 예시적인 AVX 명령어 포맷을 도시한다. 도 15b는 도 15a로부터의 필드들이 풀 오피코드 필드(1574) 및 베이스 연산 필드(1542)를 구성하는 것을 도시한다. 도 15c는 도 15a의 필드들이 레지스터 인덱스 필드(1544)를 구성하는 것을 도시한다.
VEX 프리픽스(바이트 0-2)(1502)는 3 바이트 형태로 인코딩된다. 제1 바이트는 포맷 필드(1540)(VEX 바이트 0, 비트들 [7:0])이고, 이것은 명시적 C4 바이트 값(C4 명령어 포맷을 구별하는데 사용되는 고유한 값)을 포함한다. 제2-제3 바이트들(VEX 바이트들 1-2)은 특정 능력을 제공하는 다수의 비트 필드들을 포함한다. 구체적으로, REX 필드(1505)(VEX 바이트 1, 비트 [7:5])는 VEX.R 비트 필드(VEX 바이트 1, 비트 [7] - R), VEX.X 비트 필드(VEX 바이트 1, 비트 [6] - X), 및 VEX.B 비트 필드(VEX 바이트 1, 비트 [5] - B)로 이루어진다. 명령어들의 다른 필드들은 기술분야에 알려진 바와 같은 레지스터 인덱스들의 하위 3 비트(rrr, xxx 및 bbb)을 인코딩하여, VEX. R, VEX. X 및 VEX. B를 더함으로써 Rrrr, Xxxx와 Bbbb가 형성될 수 있다. 오피코드 맵 필드(1518)(VEX 바이트 1, 비트 [4:0] - mmmmm)는 내재된 선두 오피코드 바이트를 인코드하는 콘텐츠를 포함한다. W 필드(1564)(VEX 바이트 2, 비트 [7] - W)는, 표기 VEX.W로 나타내며, 명령어에 따라 상이한 기능들을 제공한다. VEX.vvvv(1523)(VEX 바이트 2, 비트 [6:3]-vvvv)의 역할은 이하의 것을 포함할 수 있다: 1) VEX.vvvv는 반전된(1들 보수) 형태로 명시되고 2개 이상의 소스 오퍼랜드들을 갖는 명령어들에 대해 유효한 제1 소스 레지스터 오퍼랜드를 인코딩하거나; 2) VEX.vvvv는 특정 벡터 시프트들에 대해 1들 보수 형태로 명시되는 목적지 레지스터 오퍼랜드를 인코딩하거나; 또는 3) VEX.vvvv는 어떤 오퍼랜드도 인코딩하지 않으며, 이 필드는 유보되어 1111b를 포함해야 한다. VEX.L(1568) 사이즈 필드(VEX 바이트 2, 비트 [2]-L) = 0이면, 이는 158 비트 벡터를 표시하고; VEX.L = 1이면, 이는 256 비트 벡터를 표시한다. 프리픽스 인코딩 필드(1525)(VEX 바이트 2, 비트 [1:0]-pp)는 베이스 연산 필드에 대해 추가적인 비트들을 제공한다.
실제 오피코드 필드(1530)(바이트 3)는 또한 오피코드 바이트로서 알려져 있다. 오피코드의 일부는 이 필드에 명시된다.
MOD R/M 필드(1540)(바이트 4)는 MOD 필드(1542)(비트 [7-6]), Reg 필드(1544)(비트 [5-3]) 및 R/M 필드(1546)(비트 [2-0])를 포함한다. Reg 필드(1544)의 역할은 이하의 것을 포함할 수 있다: 목적지 레지스터 오퍼랜드 또는 소스 레지스터 오퍼랜드를 인코딩하거나(Rrrr의 rrr), 또는 오피코드 확장으로서 취급되어 임의의 명령어 오퍼랜드를 인코딩하는 데 이용되지 않는다. R/M 필드(1546)의 역할은 이하의 것을 포함할 수 있다: 메모리 어드레스를 참조하는 명령어 오퍼랜드를 암호화하거나, 또는 목적지 레지스터 오퍼랜드 또는 소스 레지스터 오퍼랜드를 암호한다.
SIB(Scale, Index, Base) - Scale 필드(1550)(바이트 5)의 콘텐츠는 메모리 어드레스 생성을 위해 사용되는 SS(1552)(비트 [7-6])를 포함한다. SIB.xxx(1554)(비트 [5-3]) 및 SIB.bbb(1556)(비트 [2-0])의 콘텐츠들 레지스터 인덱스들 Xxxx 및 Bbbb와 관련하여 앞서 참조되었다.
변위 필드(1562) 및 즉치 필드(immediate field)(IMM8)(1572)는 어드레스 데이터를 포함한다.
예시적인 레지스터 아키텍처
도 16은 본 발명의 일 실시예에 따른 레지스터 아키텍처(1600)의 블럭도이다. 도시된 실시예에서는, 515 비트 폭인 32개의 벡터 레지스터들(1610)이 존재하고; 이러한 레지스터들은 zmm0 내지 zmm31로서 참조된다. 하위 19개의 zmm 레지스터들의 하위 256 비트는 레지스터들 ymm0-19에 중첩된다. 하위 19개 zmm 레지스터들의 하위 158 비트(ymm 레지스터들의 하위 158 비트)는 레지스터들 xmm0-18에 중첩된다.
기입 마스크 레지스터들(1618)- 도시된 실시예에서는, 각각이 사이즈가 64 비트인 8개의 기입 마스크 레지스터들(k0 내지 k7)이 있다. 대안적 실시예에서, 기입 마스크 레지스터들(1618)은 사이즈가 19 비트이다. 앞서 설명된 바와 같이, 본 발명의 일 실시예에서는, 벡터 마스크 레지스터 k0가 기입 마스크로서 사용될 수 없고; 정상적으로 k0를 표시하는 인코딩이 기입 마스크에 대해 사용될 때, 이는 OxFFFF의 하드와이어드 기입 마스크를 선택하여, 그 명령어에 대한 기입 마스킹을 효과적으로 디스에이블한다.
범용 레지스터들(1625)- 도시된 실시예에서는, 기존의 x86 어드레싱 모드들과 함께 메모리 오퍼랜드들을 어드레스하는데 사용되는 16개의 64 비트 범용 레지스터들이 존재한다. 이러한 레지스터들은 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R18라는 이름으로 참조된다.
MMX 패킹된 정수 플랫 레지스터 파일(1650)이라는 에일리어싱된 스칼라 부동 소수점 스택 레지스터 파일(x87 스택)(1645) - 도시된 실시예에서, x87 스택은, x87 명령어 세트 확장을 사용하여 32/64/80 비트 부동 소수점 데이터에 대해 스칼라 부동 소수점 연산들을 수행하는데 사용되는 8개 엘리먼트 스택인 반면; MMX 레지스터들은, 64비트 패킹된 정수 데이터에 대해 연산들을 수행하는 것은 물론, MMX 및 XMM 레지스터들 사이에서 수행되는 일부 연산들에 대한 오퍼랜드들을 보유하는데 사용된다.
본 발명의 대안적인 실시예들은 더 넓거나 더 좁은 레지스터들을 이용할 수 있다. 추가적으로, 본 발명의 대안적인 실시예들은 더 많거나, 더 적거나, 상이한 레지스터 파일들 및 레지스터들을 사용할 수 있다.
예시적인 코어 아키텍처들, 프로세서들 및 컴퓨터 아키텍처들
프로세서 코어들은, 상이한 방식들로, 다양한 목적들을 위해, 및 상이한 프로세서들에 구현될 수 있다. 예를 들어, 이러한 코어들의 구현들은 다음을 포함할 수 있다: 1) 범용 컴퓨팅을 대상으로 하는 범용 순차적 코어; 2) 범용 컴퓨팅을 대상으로 하는 고 성능 범용 비순차적 코어; 3) 그래픽 및/또는 과학적 (쓰루풋) 컴퓨팅을 주로 대상으로 하는 특수 목적 코어를 포함할 수 있다. 상이한 프로세서들의 구현들은: 1) 범용 컴퓨팅을 대상으로 하는 하나 이상의 범용 순차적 코어들 및/또는 범용 컴퓨팅을 대상으로 하는 하나 이상의 범용 비순차적 코어들을 포함하는 CPU; 및 2) 그래픽 및/또는 과학적 (쓰루풋) 컴퓨팅을 주로 대상으로 하는 하나 이상의 특수 목적 코어들을 포함하는 코프로세서를 포함할 수 있다. 이러한 상이한 프로세서들은: 1) CPU와는 별개인 칩 상의 코프로세서; 2) CPU와 동일한 패키지 내의 개별 다이 상의 코프로세서; 3) CPU와 동일한 다이 상의 코프로세서(이 경우에, 이러한 코프로세서를 때때로 통합 그래픽 및/또는 과학적 (쓰루풋) 로직과 같은 특수 목적 로직이라고 하거나, 또는 특수 목적 코어들이라고 함); 및 4) 설명된 CPU(때때로 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)라고 함), 위에 개시된 코프로세서, 및 부가적인 기능성을 동일한 다이 상에 포함할 수 있는 시스템 온 칩(system on a chip)을 포함할 수 있는, 상이한 컴퓨터 시스템 아키텍처들에 이른다. 예시적인 코어 아키텍처들이 다음에 설명되고, 예시적인 프로세서들 및 컴퓨터 아키텍처들의 설명들이 뒤따른다.
예시적인 코어 아키텍처들
순차적 및 비순차적 코어 블럭도
도 17a는 본 발명의 실시예들에 따른 예시적인 순차적(in-order) 파이프라인 및 예시적인 레지스터 리네이밍, 비순차적(out-of-order) 발행/실행 파이프라인 양자 모두를 도시하는 블럭도이다. 도 17b는 본 발명의 실시예들에 따른 프로세서에 포함될 순차적 아키텍처 코어 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 아키텍처 코어의 예시적인 실시예 양자 모두를 도시하는 블럭도이다. 도 17a-b에서의 실선 박스는 순차적 파이프라인 및 순차적 코어를 도시하고, 점선 박스의 옵션적인 추가는 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 및 코어를 도시한다. 순차적 양상이 비순차적 양상의 서브세트라는 것을 고려하여, 비순차적 양상이 설명될 것이다.
도 17a에서, 프로세서 파이프라인(1700)은, 페치 스테이지(fetch stage)(1702), 길이 디코드 스테이지(1704), 디코드 스테이지(1706), 할당 스테이지(1708), 리네이밍 스테이지(1710), (디스패치 또는 발행이라고도 알려진) 스케줄링 스테이지(1715), 레지스터 판독/메모리 판독 스테이지(1717), 실행 스테이지(1719), 라이트 백(write back)/메모리 기입 스테이지(1721), 예외 처리 스테이지(1722), 및 커밋 스테이지(1724)를 포함한다.
도 17b는 실행 엔진 유닛(1750)에 연결되는 프론트 엔드 유닛(front end unit)(1730)을 포함하는 프로세서 코어(1790)를 도시하며, 양자 모두는 메모리 유닛(1770)에 연결된다. 코어(1790)는 RISC(Reduced Instruction Set Computing) 코어, CISC(Complex Instruction Set Computing) 코어, VLIW(Very Long Instruction Word) 코어, 또는 하이브리드 또는 대안적인 코어 타입일 수 있다. 또 다른 옵션으로서, 코어(1790)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, GPGPU(General Purpose computing Graphics Processing Unit) 코어, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프론트 엔드 유닛(1730)은, 디코드 유닛(1740)에 연결되는 명령어 페치 유닛(1738)에 연결되는 명령어 TLB(Translation Lookaside Buffer)(1736)에 연결되는 명령어 캐시 유닛(1734)에 연결되는 분기 예측 유닛(1732)을 포함한다. 디코드 유닛(1740)(또는 디코더)은 명령어들을 디코딩할 수 있으며, 오리지널 명령어들로부터 디코딩되거나, 또는 다른 방식으로 이들을 반영하거나, 또는 이들로부터 유도되는, 하나 이상의 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들 또는 다른 제어 신호들을 출력으로서 생성할 수 있다. 디코드 유닛(1740)은 다양한 상이한한 메커니즘들을 사용하여 구현될 수 있다. 적합한 메커니즘들의 예들은, 이에 제한되는 것은 아니지만, 룩-업 테이블들, 하드웨어 구현들, PLA들(Programmable Logic Arrays), 마이크로코드 ROM들(Read Only Memories) 등을 포함한다. 일 실시예에서, 코어(1790)는 특정 매크로 명령들을 위한 마이크로코드를 저장하는 마이크로코드 ROM 또는 기타 매체를 (예를 들어, 디코드 유닛(1740)에 또는 프론트 엔드 유닛(1730) 내에서 다른 방식으로) 포함한다. 디코드 유닛(1740)은 실행 엔진 유닛(1750)에서의 리네이밍/할당기 유닛(1752)에 연결된다.
실행 엔진 유닛(1750)은, 리타이어먼트 유닛(1754) 및 하나 이상의 스케줄러 유닛(들)(1756)의 세트에 연결되는 리네이밍/할당기 유닛(1752)을 포함한다. 스케줄러 유닛(들)(1756)은 임의 수의 상이한 스케줄러들을 나타내고, 예약들 스테이션들, 중앙 명령어 윈도우 등을 포함한다. 스케줄러 유닛(들)(1756)은 물리적 레지스터 파일(들) 유닛(들)(1758)에 연결된다. 물리적 레지스터 파일(들) 유닛들(1758) 각각은 하나 이상의 물리적 레지스터 파일들을 나타내고, 이들 중 상이한 것들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점과 같은 하나 이상의 상이한 데이터 타입들, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등을 저장한다. 하나의 실시예에서, 물리적 레지스터 파일(들) 유닛(1758)은 벡터 레지스터 유닛, 기입 마스크 레지스터 유닛 및 스칼라 레지스터 유닛을 포함한다. 이러한 레지스터 유닛들은 아키텍처의 벡터 레지스터들, 벡터 마스크 레지스터들 및 범용 레지스터들을 제공할 수 있다. 레지스터 리네이밍 및 비순차적 실행이 구현될 수 있는 다양한 방식들(예를 들어, 재정렬 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 사용하는 것; 장래 파일(future file)(들), 이력 버퍼(history buffer)(들) 및 리타이어먼트 레지스터 파일(들)을 사용하는 것; 레지스터 맵들 및 레지스터들의 풀(pool)을 사용하는 것 등)을 도시하기 위해, 물리적 레지스터 파일(들) 유닛(들)(1758)은 리타이어먼트 유닛(1754)에 의해 중첩된다. 리타이어먼트 유닛(1754) 및 물리적 레지스터 파일(들) 유닛(들)(1758)은 실행 클러스터(들)(1760)에 연결된다. 실행 클러스터(들)(1760)는 하나 이상의 실행 유닛들(1762)의 세트, 및 하나 이상의 메모리 액세스 유닛들(1764)의 세트를 포함한다. 실행 유닛들(1762)은 다양한 타입의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예를 들어, 시프트, 덧셈, 뺄셈, 곱셈)을 수행할 수 있다. 일부 실시예들은 특정 기능들이나 기능들의 세트들에 전용인 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 단 하나의 실행 유닛, 또는 모두가 모든 기능들을 수행하는 다수의 실행 유닛들을 포함할 수 있다. 스케줄러 유닛(들)(1756), 물리적 레지스터 파일(들) 유닛(들)(1758), 및 실행 클러스터(들)(1760)가 가능하게는 복수인 것으로 도시되어 있는데, 그 이유는 특정 실시예들이 특정 타입들의 데이터/연산들에 대한 개별 파이프라인들(예를 들어, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 각각이 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 메모리 액세스 파이프라인- 그리고, 개별 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(1764)을 갖는 특정 실시예들이 구현됨)을 생성하기 때문이다. 개별 파이프라인들이 사용되는 경우, 이러한 파이프라인들 중 하나 이상은 비순차적 발행/실행일 수 있고 나머지는 순차적일 수 있다는 점도 이해되어야 한다.
메모리 액세스 유닛들(1764)의 세트는 메모리 유닛(1770)에 연결되고, 이는 레벨 2(L2) 캐시 유닛(1776)에 연결되는 데이터 캐시 유닛(1774)에 연결되는 데이터 TLB 유닛(1772)을 포함한다. 하나의 예시적인 실시예에서, 메모리 액세스 유닛들(1764)은, 부하 유닛, 저장 어드레스 유닛 및 저장 데이터 유닛을 포함할 수 있고, 이들 각각은 메모리 유닛(1770)에서의 데이터 TLB 유닛(1772)에 연결된다. 명령어 캐시 유닛(1734)은 메모리 유닛(1770)에서의 레벨 2(L2) 캐시 유닛(1776)에 또한 연결된다. L2 캐시 유닛(1776)은 하나 이상의 다른 레벨의 캐시에 연결되어 궁극적으로 메인 메모리에 연결된다.
예를 들어, 예시적인 레지스터 리네이밍, 비순차적 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(1700)을 구현할 수 있다: 1) 명령어 페치(1738)는 페치 및 길이 디코드 스테이지(1702 및 1704)를 수행하고, 2) 디코드 유닛(1740)은 디코드 스테이지(1706)를 수행하고, 3) 리네임/할당기 유닛(1752)은 할당 스테이지(1708) 및 리네이밍 스테이지(1710)를 수행하고, 4) 스케줄러 유닛(들)(1756)은 스케줄 스테이지(1715)를 수행하고, 5) 물리적 레지스터 파일(들) 유닛(들)(1758) 및 메모리 유닛(1770)은 레지스터 판독/메모리 판독 스테이지(1717)를 수행하고, 실행 클러스터(1760)은 실행 스테이지(1719)를 수행하고, 6) 메모리 유닛(1770) 및 물리적 레지스터 파일(들) 유닛(들)(1758)은 라이트 백/메모리 기입 스테이지(1721)를 수행하고; 7) 다양한 유닛들이 예외 처리 스테이지(1722)에 포함될 수 있으며, 그리고 8) 리타이어먼트 유닛(1754) 및 물리적 레지스터 파일(들) 유닛(들)(1758)이 커밋(commit) 스테이지(1724)를 수행한다.
코어(1790)는 본 명세서에 설명되는 명령어(들)를 포함하여 하나 이상의 명령어들 세트들(예를 들어, (보다 새로운 버전들이 추가된 일부 확장들을 갖는) x86 명령어 세트; 캘리포니아주 서니베일의 MIPS Technologies의 MIPS 명령어 세트; 캘리포니아주 서니베일의 ARM Holdings의 (NEON 과 같은 옵션의 부가의 확장들을 갖는) ARM 명령어 세트)을 지원할 수 있다. 일 실시예에서, 코어(1790)는 패킹된 데이터 명령어 세트 확장(예컨대, AVX1, AVX2)을 지원하는 로직을 포함하고, 이에 의해 많은 멀티미디어 애플리케이션들에 의해 사용되는 연산들이 패킹된 데이터를 사용하여 수행될 수 있게 한다.
코어는 (2 이상의 병렬 세트들의 연산들 또는 쓰레드들을 실행하는) 멀티쓰레딩을 지원할 수 있고, 시분할 멀티쓰레딩(time sliced multithreading), (단일의 물리적 코어가, 물리적 코어가 동시에 멀티쓰레딩하고 있는 쓰레드들 각각에 대해 논리적 코어를 제공하는) 동시 멀티쓰레딩, 또는 이들의 조합(예를 들어, Intel® Hyperthreading 기술에서와 같이 시분할 페칭 및 디코딩과 그 이후의 동시 멀티쓰레딩)을 포함하는 다양한 방식으로 그렇게 할 수 있다는 점이 이해되어야 한다.
레지스터 리네이밍이 비순차적 실행의 맥락에서 설명되지만, 레지스터 리네이밍이 순차적 아키텍처에 사용될 수 있다는 점이 이해되어야 한다. 프로세서의 도시된 실시예는 또한 개별 명령어 및 데이터 캐시 유닛들(1734/1774) 및 공유된 L2 캐시 유닛(1776)을 포함하지만, 대안적인 실시예들은, 예를 들어, 레벨 1(L1) 내부 캐시와 같은 명령어들 및 데이터 양자 모두에 대해 단일의 내부 캐시, 또는 다수 레벨들의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 코어 및/또는 프로세서에 대해 외부에 있는 외부 캐시와 내부 캐시의 조합을 포함할 수 있다. 대안적으로 모든 캐시가 코어 및/또는 프로세서에 대해 외부에 있을 수 있다.
구체적인 예시적 순차적 코어 아키텍처
도 18a-b는 보다 구체적인 예시적 순차적 코어 아키텍처의 블럭도를 도시하며, 이러한 코어는 칩 내의 (동일 타입 및/또는 다른 타입들의 다른 코어들을 포함하는) 여러 로직 블럭들 중 하나일 수 있다. 로직 블럭들은, 애플리케이션에 의존하여, 일부 고정된 기능 로직, 메모리 I/O 인터페이스들 및 기타 필요한 I/O 로직에 의해 고 대역폭 상호접속 네트워크(예를 들어, 링 네트워크)를 통해서 통신한다.
도 18a는, 본 발명의 실시예들에 따른, 단일 프로세서 코어를, 온-다이 상호접속 네트워크(1802)로의 그 접속 및 레벨 2(L2) 캐시의 그 로컬 서브세트(1804)와 함께, 나타낸 블럭도이다. 일 실시예에서, 명령어 디코더(1800)는 패킹된 데이터 명령어 세트 확장을 갖는 x86 명령어 세트를 지원한다. L1 캐시(1806)는 스칼라 및 벡터 유닛들 내로 캐시 메모리에 대한 저 지연시간 액세스를 가능하게 한다. (설계를 간략화하기 위한) 일 실시예에서, 스칼라 유닛(1808) 및 벡터 유닛(1810)은 개별 레지스터 세트들(각각, 스칼라 레지스터들(1815) 및 벡터 레지스터들(1817))을 사용하고, 이들 사이에 전송되는 데이터는 메모리에 기입되고 나서 레벨 1(L1) 캐시(1806)로부터 리드 백(read back)되는 반면, 본 발명의 대안 실시예들은 상이한 접근방식을 사용할 수 있다(예를 들어, 단일 레지스터 세트를 사용하거나, 또는 기입 및 리드 백되지 않고 데이터가 2개의 레지스터 파일들 사이에서 전송되게 하는 통신 경로를 포함함).
L2 캐시(1804)의 로컬 서브세트는 프로세서 코어당 하나씩 개별 로컬 서브세트들로 분할되는 글로벌 L2 캐시의 일부이다. 각각의 프로세서 코어는 L2 캐시(1804)의 자기 자신의 로컬 서브세트에 대한 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독되는 데이터는, 그 L2 캐시 서브세트(1804)에 저장되고, 이들 자신의 로컬 L2 캐시 서브세트들에 액세스하는 다른 프로세서 코어들과 병렬로, 빠르게 액세스될 수 있다. 프로세서 코어에 의해 기입되는 데이터는, 자기 자신의 L2 캐시 서브세트(1804)에 저장되고, 필요하다면 다른 서브세트들로부터 플러싱된다. 링 네트워크는 공유 데이터에 대한 코히어런시(coherency)를 보장한다. 링 네트워크는 양-방향성이어서, 프로세서 코어들, L2 캐시들 및 다른 논리 블럭들과 같은 에이전트들이 칩 내에서 상호 통신하게 한다. 각각의 링 데이터 경로는 방향당 1015 비트 폭이다.
도 18b는 본 발명의 실시예들에 따른 도 18a에서 프로세서 코어의 부분의 확대도이다. 도 18b는, 벡터 유닛(1810) 및 벡터 레지스터(1817)에 대한 더 상세한 부분뿐만 아니라 L1 캐시(1804)의 L1 데이터 캐시(1806A) 부분을 포함한다. 구체적으로, 벡터 유닛(1810)은 19 폭 VPU(Vector Processing Unit)(19 폭 ALU(1828) 참조)이며, 이는 정수 명령어, 단정밀도 부동 명령어, 및 배정밀도 부동 명령어 중 하나 이상을 실행한다. VPU는 스위즐링 유닛(1823)에 의한 레지스터 입력들의 스위즐링(swizzling), 수치 변환 유닛(1822A-B)에 의한 수치 변환, 및 메모리 입력에 대한 복제 유닛(1824)에 의한 복제를 지원한다. 기입 마스크 레지스터들(1826)은 결과적인 벡터 기입들을 술어화(predicate)하는 것을 허용한다.
통합 메모리 컨트롤러 및 그래픽들을 갖는 프로세서
도 19는, 본 발명의 실시예들에 따라, 2 이상의 코어를 가질 수 있고, 통합 메모리 컨트롤러를 가질 수 있고, 및 통합 그래픽을 가질 수 있는 프로세서(1900)의 블럭도이다. 도 19의 실선 박스들은 싱글 코어(1902A), 시스템 에이전트(1910), 하나 이상의 버스 컨트롤러 유닛들(1919)의 세트를 갖는 프로세서(1900)를 도시하는 한편, 옵션인 점선 박스들의 추가는 다수의 코어들(1902A-N), 시스템 에이전트 유닛(1910) 내의 하나 이상의 통합 메모리 컨트롤러 유닛(들)(1917)의 세트, 및 특수 목적 로직(1908)을 갖는 대안적인 프로세서(1900)를 도시한다.
따라서, 프로세서(1900)의 다양한 구현들은: 1) (하나 이상의 코어들을 포함할 수 있는) 통합 그래픽 및/또는 과학적 (쓰루풋) 로직인 특수 목적 로직(1908), 및 하나 이상의 범용 코어들인 코어들(1902A-N)(예를 들어, 범용 순차적 코어들, 범용 비순차적 코어들, 이 둘의 조합)을 갖는 CPU; 2) 그래픽 및/또는 과학적 (쓰루풋)을 위해 주로 의도된 다수의 특수 목적 코어들인 코어들(1902A-N)을 갖는 코프로세서; 및 3) 다수의 범용 순차적 코어들인 코어들(1902A-N)을 갖는 코프로세서를 포함할 수 있다. 따라서, 프로세서(1900)는 범용 프로세서, 코프로세서, 또는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(General Purpose Graphics Processing Unit), 하이 쓰루풋 MIC(Many Integrated Core) 코프로세서(30개 이상의 코어들을 포함함), 임베디드 프로세서 등과 같은 특수 목적 프로세서일 수 있다. 프로세서는 하나 이상의 칩들 상에 구현될 수 있다. 프로세서(1900)는, 예를 들어, BiCMOS, CMOS, 또는 NMOS 와 같은 다수의 프로세스 기술들 중 임의의 것을 사용하여 하나 이상의 기판들의 일부가 될 수 있고 및/또는 이들 기판 상에 구현될 수 있다.
메모리 계층구조는 코어들 내의 하나 이상의 레벨들의 캐시, 세트 또는 하나 이상의 공유 캐시 유닛들(1906), 및 통합 메모리 컨트롤러 유닛들(1917)의 세트에 연결되는 외부 메모리(도시되지 않음)를 포함한다. 공유 캐시 유닛들(1906)의 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 기타 레벨들의 캐시와 같은 하나 이상의 중간 레벨 캐시들, LLC(Last Level Cache), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서 링 기반 상호접속 유닛(1915)은 통합 그래픽 로직(1908), 공유 캐시 유닛들(1906)의 세트, 및 시스템 에이전트 유닛(1910)/통합 메모리 컨트롤러 유닛(들)(1917)을 상호접속하지만, 대안적인 실시예들은 이러한 유닛들을 상호접속하기 위한 잘 알려진 기술들 중 임의의 것을 사용할 수 있다. 일 실시예에서는, 하나 이상의 캐시 유닛들(1906)과 코어들(1902A-N) 사이에 코히런시가 유지된다.
일부 실시예들에서, 코어들(1902A-N) 중 하나 이상은 멀티쓰레딩을 할 수 있다. 시스템 에이전트(1910)는 코어들(1902A-N)을 조정하고 동작시키는 컴포넌트들을 포함한다. 시스템 에이전트 유닛(1910)은 예를 들어 PCU(Power Control Unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1902A-N) 및 통합 그래픽 로직(1908)의 전원 상태를 조절하기 위해 필요한 로직과 컴포넌트들일 수 있거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속되는 디스플레이들을 구동하기 위한 것이다.
코어들(1902A-N)은 아키텍처 명령어 세트와 관련하여 동종 또는 이종일 수 있다; 즉, 코어들(1902A-N) 중 둘 이상은 동일 명령어 세트를 실행할 수 있는 반면, 다른 것들은 그 명령어 세트의 서브세트 또는 상이한 명령어 세트만을 실행할 수 있다.
예시적인 컴퓨터 아키텍처
도 20-23은 예시적 컴퓨터 아키텍처들의 블럭도들이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 퍼스널 디지털 어시스턴트들, 엔지니어링 워크스테이션들, 서버들, 네트워크 장치들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, DSP들(Digital Signal Processors), 그래픽 디바이스들, 비디오 게임 디바이스들, 셋-톱 박스들, 마이크로 컨트롤러들, 셀 전화들, 휴대용 미디어 플레이어들, 핸드헬드 장치들, 및 다양한 다른 전자 디바이스들을 위한 기술분야에 알려진 다른 시스템 설계들 및 구성들 또한 적합하다. 일반적으로, 본 명세서에 개시되는 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 매우 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적합하다.
이제, 도 20을 참조하면, 본 발명의 일 실시예에 따른 시스템(2000)의 블럭도가 도시된다. 시스템(2000)은 하나 이상 프로세서들(2010, 2018)을 포함할 수 있고, 이는 컨트롤러 허브(2023)에 연결된다. 일 실시예에서, 컨트롤러 허브(2023)는, GMCH(Grahpics Memory Controller Hub)(2090) 및 IOH(Input/Output Hub)(2050)(개별 칩들 상에 있을 수 있음)를 포함하고; GMCH(2090)는 메모리 및 메모리(2040)와 코프로세서(2045)에 연결되는 그래픽 컨트롤러들을 포함하고; IOH(2050)는 GMCH(2090)에 I/O(Input/Output) 디바이스들(2060)을 연결한다. 대안적으로, 메모리 및 그래픽 컨트롤러들 중 하나 또는 양자 모두는 (본 명세서에서 설명되는 바와 같이) 프로세서 내에 통합되고, 메모리(2040) 및 코프로세서(2045)는 프로세서(2010) 및 IOH(2050)와 단일 칩에 있는 컨트롤러 허브(2023)에 직접 연결된다.
추가 프로세서들(2018)의 옵션적 속성은 도 20에서 파선으로 표기된다. 각각의 프로세서(2010, 2018)는, 본 명세서에 설명되는 프로세싱 코어들 중 하나 이상을 포함할 수 있고, 프로세서(1900)의 일부 버전일 수 있다.
메모리(2040)는, 예를 들어, DRAM(Dynamic Random Access Memory), PCM(Phase Change Memory), 또는 이 둘의 조합일 수 있다. 적어도 하나의 실시예에 대해, 컨트롤러 허브(2023)는, FSB(Front Side Bus)와 같은 멀티-드롭 버스, QPI(QuickPath Interconnect)와 같은 지점-대-지점 인터페이스, 또는 유사한 접속(2095)을 통해 프로세서(들)(2010, 2018)과 통신한다.
일 실시예에서, 코프로세서(2045)는, 예를 들어, 하이 쓰루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 일 실시예에서, 컨트롤러 허브(2023)는 통합 그래픽 가속기를 포함할 수 있다.
아키텍처 특성, 마이크로아키텍처 특성, 열적 특성, 전력 소비 특성 등을 포함하는 장점 기준들의 스펙트럼과 관련하여 물리적 리소스들(2010, 2018) 사이에는 다양한 상이함이 존재할 수 있다.
일 실시예에서, 프로세서(2010)는 일반적인 타입의 데이터 처리 연산들을 제어하는 명령어들을 실행한다. 명령어들 내에는 코프로세서 명령어들이 내장될 수 있다. 프로세서(2010)는 이러한 코프로세서 명령어들을 부속된 코프로세서(2045)에 의해 실행되어야 하는 타입의 것으로 인식한다. 따라서, 프로세서(2010)는 이러한 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서 버스 또는 다른 상호접속 상에서 코프로세서(2045)에 발행한다. 코프로세서(들)(2045)는 수신된 코프로세서 명령어들을 수락 및 실행한다.
이제 도 21을 참조하면, 본 발명의 일 실시예에 따른 제1 보다 구체적인 예시적인 시스템(2100)의 블럭도가 도시된다. 도 21에 도시된 바와 같이, 멀티프로세서 시스템(2100)은 지점-대-지점 상호접속 시스템이고, 지점-대-지점 상호접속(2150)을 통해 연결되는 제1 프로세서(2170) 및 제2 프로세서(2180)를 포함한다. 프로세서들(2170 및 2180) 각각은 프로세서(1900)의 일부 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(2170 및 2180)은 각각 프로세서들(2010 및 2018)이고, 코프로세서(2138)은 코프로세서(2045)이다. 다른 실시예에서, 프로세서들(2170 및 2180)은 각각 프로세서(2010) 및 코프로세서(2045)이다.
프로세서들(2170 및 2180)은 각각 IMC(Integrated Memory Controller) 유닛들(2172 및 2182)을 포함하는 것으로 도시된다. 프로세서(2170)는 또한 자신의 버스 컨트롤러 유닛들의 일부로서 P-P(Pont-to-Point) 인터페이스들(2176, 2178)을 포함하고; 유사하게, 제2 프로세서(2180)는 P-P 인터페이스들(2186, 2188)을 포함한다. 프로세서들(2170, 2180)은 P-P 인터페이스 회로들(2178, 2188)을 사용하는 P-P(Pont-to-Point) 인터페이스(2150)를 통해 정보를 교환할 수 있다. 도 21에 도시된 바와 같이, IMC들(2172 및 2182)은 프로세서들을 각각의 메모리, 즉 메모리(2132) 및 메모리(2134)에 연결하며, 이는 각 프로세서들에 국부적으로 부속되는 메인 메모리의 일부들일 수 있다.
프로세서들(2170, 2180)은 지점 대 지점 인터페이스 회로들(2176, 2194, 2186, 2198)을 사용하는 개별 P-P 인터페이스들(2152, 2154)를 통해 칩셋(2190)과 정보를 각각 교환할 수 있다. 칩셋(2190)은 고 성능 인터페이스(2139)를 통해 코프로세서(2138)와 옵션으로 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(2138)는, 예를 들어, 하이 쓰루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유 캐시(도시되지 않음)가 어느 한 프로세서에 또는 양자 모두의 프로세서들의 외부에 포함될 수 있지만, P-P 상호접속을 통해 프로세서들과 접속될 수 있어, 프로세서가 저 전력 모드에 놓이게 되면, 어느 한 프로세서 또는 양자 모두의 프로세서들의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(2190)은 인터페이스(2196)를 통해 제1 버스(2119)에 연결될 수 있다. 일 실시예에서, 제1 버스(2119)는, PCI(Peripheral Component Interconnect) 버스, 또는 PCI 익스프레스 버스 또는 다른 3세대 I/O 상호접속 버스와 같은 버스일 수 있지만, 본 발명의 범위가 이에 한정되는 것은 아니다.
도 21에 도시된 바와 같이, 다양한 I/O 디바이스들(2117)이 제1 버스(2119)를 제2 버스(2123)에 결합하는 버스 브릿지(2121)와 함께 제1 버스(2119)에 연결될 수 있다. 일 실시예에서는, 코프로세서들, 하이 쓰루풋 MIC 프로세서들, GPGPU들, (예를 들어, 그래픽 가속기들 또는 DSP(Digital Signal Processing) 유닛들과 같은) 가속기들, 필드 프로그래머블 게이트 어레이들와 같은 하나 이상의 추가적인 프로세서(들)(2118) 또는 임의의 다른 프로세서가 제1 버스(2119)에 연결된다. 일 실시예에서, 제2 버스(2123)는 LPC(Low Pin Count) 버스일 수 있다. 일 실시예에서는, 예를 들어, 키보드 및/또는 마우스(2122), 통신 디바이스들(2127) 및 명령어들/코드 및 데이터(2130)를 포함할 수 있는 디스크 드라이브 또는 기타 대용량 저장 디바이스와 같은 저장 유닛(2128)을 포함하는 다양한 디바이스들이 제2 버스(2123)에 연결될 수 있다. 또한, 오디오 I/O(2124)가 제2 버스(2123)에 연결될 수 있다. 다른 아키텍처들도 가능하다는 점에 주의하자. 예를 들어, 도 21의 지점-대-지점 아키텍처 대신에, 시스템은 멀티 드롭 버스 또는 다른 그러한 구조를 구현할 수 있다.
이제 도 22를 참조하면, 본 발명의 실시예에 따른 제2 보다 구체적인 예시적인 시스템(2200)의 블럭도가 도시된다. 도 21 및 22에서 동일한 엘리먼트들은 동일한 참조 번호들을 가지며, 도 21의 특정 양상들은 도 22의 다른 양상들을 불명료하게 하는 것을 회피하기 위해 도 22로부터 생략되었다.
도 22는, 프로세서들(2170, 2180)이 통합 메모리 및 I/O 제어 로직("CL")(2172 및 2182)를 각각 포함할 수 있다는 점을 도시한다. 따라서, CL(2172, 2182)는 통합 메모리 컨트롤러 유닛들 및 I/O 제어 로직을 포함한다. 도 22는, CL(2172, 2182)에 메모리들(2132, 2134)만이 연결되는 것이 아니라, 제어 로직(2172, 2182)에는 I/O 디바이스들(2217)도 연결된다는 점을 도시한다. 레거시 I/O 디바이스들(2218)은 칩셋(2190)에 연결된다.
이제, 도 23을 참조하면, 본 발명의 일 실시예에 따른 SoC(2300)의 블럭도가 도시된다. 도 19에서의 유사한 요소들은 동일한 참조 번호를 갖는다. 또한, 점선 박스는 더욱 개선된 SoC들에 관한 옵션적 특징들이다. 도 23에서, 상호접속 유닛(들)(2302)은: 하나 이상의 코어들(232A-N)의 세트 및 공유 캐시 유닛(들)(1906)을 포함하는 애플리케이션 프로세서(2310); 시스템 에이전트 유닛(1910); 버스 컨트롤러 유닛(들)(1919); 통합 메모리 컨트롤러 유닛(들)(1917); 통합 그래픽 로직, 이미지 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나 이상의 코프로세서들(2323) 또는 그 세트; SRAM(Static Random Access Memory) 유닛(2330); DMA(Direct Memory Access) 유닛(2332); 및 하나 이상의 외부 디스플레이들에 연결하기 위한 디스플레이 유닛(2340)에 연결된다. 일 실시예에서, 코프로세서(들)(2323)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 하이 쓰루풋 MIC 프로세서, 임베디드 프로세서와 같은 특수 목적 프로세서를 포함한다.
본 명세서에 설명되는 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어 또는 이러한 구현 접근방식들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, 저장 시스템(휘발성 및 불휘발성 메모리 및/또는 저장 엘리먼트들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그래머블 시스템들에서 실행하는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 21에 도시된 코드(2130)과 같은 프로그램 코드는 본 명세서에 설명되는 기능들을 수행하고 출력 정보를 생성하도록 입력 명령어들에 적용될 수 있다. 이러한 출력 정보는 알려진 방식으로 하나 이상의 출력 디바이스에 적용될 수 있다. 본 출원의 목적상, 프로세싱 시스템은, 예를 들어: DSP(Digital Signal Processor), 마이크로컨트롤러, ASIC(Application Specific Integrated Circuit) 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위한 고레벨 절차적 또는 객체 지향형 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는, 바람직하다면, 어셈블리 또는 기계 언어로 구현될 수도 있다. 사실상, 본 명세서에 설명되는 메커니즘들은 임의의 특정 프로그래밍 언어로 범위가 제한되는 것이 아니다. 어느 경우에나, 이러한 언어는 컴파일되거나 해석되는 언어일 수 있다.
적어도 일 실시예의 하나 이상의 양상은, 머신에 의해 판독될 때 머신으로 하여금 본 명세서에서 설명되는 기술들을 수행하는 로직 제조하게 하는, 프로세서 내의 다양한 로직 표현하는, 머신 판독가능 매체 상에 저장되는 전형적인 명령어들에 의해 구현될 수 있다. "IP 코어들"로서 알려진 그러한 표현들은, 유형의 머신 판독가능 매체 상에 저장될 수 있으며, 다양한 고객들 또는 제조 설비에 제공되어, 그러한 로직 또는 프로세서를 실제로 제조하는 제조 머신들 내에 로딩될 수 있다.
이러한 머신 판독가능 저장 매체는, 하드 디스크들, 임의의 다른 타입의 디스크(플로피 디스크들, 광 디스크들, CD-ROM들(Compact Disk Read-Only Memories), CD-RW들(Compact Disk Rewritable's) 및 광자기 디스크를 포함함), 반도체 디바이스들(DRAM들(Dynamic Random Access Memories), SRAM들(Static Random Access Memories), EPROM들(Erasable Programmable Read-Only Memories), 플래시 메모리들, EEPROM들(Electrically Erasable Programmable Read-Only Memories)과 같은 ROM들(Read-Only Memories), RAM들(Random Access Memories), PCM(Phase Change Memory), 자기 또는 광 카드, 또는 전자 명령어를 저장하는 데 적합한 임의의 다른 타입의 매체와 같은 저장 매체를 포함하는, 머신 또는 디바이스에 의해 제조 또는 형성되는 물품들의 비일시적, 유형의 구성을 포함할 수 있지만, 이에 제한되는 것은 아니다.
따라서, 본 발명의 실시예들은, 또한, 명령어들을 포함하거나, 또는 본 명세서에 설명되는 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 특징들을 정의하는, HDL(Hardware Description Language)와 같은 설계 데이터를 포함하는 비-일시적, 유형인 머신 판독가능 매체를 포함한다. 이러한 실시예들은 프로그램 제품들이라고도 할 수 있다.
에뮬레이션(바이너리 해석, 코드 모핑 등을 포함함)
일부 경우들에는, 명령어 변환기가 소스 명령어 세트로부터 타겟 명령어 세트로 명령어를 변환하는데 사용될 수 있다. 예를 들어, 명령어 변환기는 코어에 의해 처리될 하나 이상의 다른 명령어들로 명령어를 (예를 들어, 정적 바이너리 해석, 동적 컴필레이션을 포함하는 동적 바이너리 해석을 이용하여) 해석하거나, 모프하거나, 에뮬레이트하거나, 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 그의 조합으로 구현될 수 있다. 명령어 변환기는 온-프로세서(on processor), 오프-프로세서(off processor), 또는 일부는 온-프로세서 일부는 오프-프로세서일 수 있다.
도 24는 본 발명의 실시예들에 따라 소스 명령어 세트 내의 바이너리 명령어들을 타겟 명령어 세트 내의 바이너리 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블럭도이다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기가 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합들로 구현될 수 있다. 도 24는 하이 레벨 언어(2402)의 프로그램을 x86 컴파일러(2404)를 사용하여 컴파일하여, 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(2419)에 의해 원천적으로 실행될 수 있는 x86 바이너리 코드(2406)를 생성할 수 있다는 것을 도시한다. 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(2419)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) Intel x86 명령어 세트 코어의 명령어 세트의 상당 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서 상에서 실행되도록 되어 있는 애플리케이션들 또는 다른 소프트웨어의 오브젝트 코드 버전들을, 호환가능하게 실행하거나 다른 방식으로 처리함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(2404)는 추가적인 링크 프로세싱 유무와 무관하게 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(2419)에서 실행될 수 있는 x86 바이너리 코드(2406)(예를 들어, 오브젝트 코드)를 생성하도록 동작될 수 있는 컴파일러를 나타낸다. 유사하게, 도 24는, 하이 레벨 언어(2402)에서의 프로그램이 대안적인 명령어 세트 컴파일러(2408)를 사용하여 컴파일되어, 적어도 하나의 x86 명령어 세트 코어가 없는 프로세서(2417)(예를 들어, 캘리포니아주 서니베일의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 및/또는 캘리포니아주 서니베일의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들이 없는 프로세서)에 의해 원천적으로 실행될 수 있는 대안적인 명령어 세트 바이너리 코드(2410)을 생성할 수 있다는 점을 보여준다. 명령어 변환기(2415)는 x86 바이너리 코드(2406)를 x86 명령어 세트 코어가 없는 프로세서(2417)에 의해 원천적으로 실행될 수 있는 코드로 변환하는데 사용된다. 이러한 변환된 코드는 대안적인 명령어 세트 바이너리 코드(2410)와 동일할 가능성이 없는데, 그 이유는 이를 행할 수 있는 명령어 변환기를 제조하기 어렵기 때문이다; 그러나, 변환된 코드는 일반적인 연산을 달성할 것이며, 대안적인 명령어 세트로부터의 명령어들로 이루어질 것이다. 따라서, 명령어 변환기(2415)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 기타 전자 디바이스가 x86 바이너리 코드(2406)를 실행할 수 있게 해주는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
설명 및 청구범위에서, "로직"이라는 용어가 사용되었을 수 있다. 본 명세서에 사용되는 바와 같이, 로직이라는 용어는, 하드웨어, 펌웨어, 소프트웨어 또는 이들의 조합을 포함할 수 있지만, 이에 제한되는 것은 아니다. 로직의 예들은, 집적 회로, 주문형 집적 회로들, 아날로그 회로들, 디지털 회로들, 프로그램된 로직 디바이스들, 명령어들을 포함하는 메모리 디바이스들 등을 포함한다. 일부 실시예들에서, 이러한 로직은 다른 회로 컴포넌트들과 함께 트랜지스터들 및/또는 게이트들을 잠재적으로 포함할 수 있다.
설명 및 청구범위에서, "연결된" 및 "접속된"이란 용어들은 이들의 파생어들과 함께 사용되었을 수 있다. 이 용어들은 상호 동의어로 의도된 것이 아님이 이해되어야 한다. 오히려, 특정한 실시예에서, "접속된"은 2개 이상의 엘리먼트들이 상호 직접 물리적으로 또는 전기적으로 접촉하는 것을 나타내는데 사용될 수 있다. "연결된"은 2개 이상의 엘리먼트들이 직접적인 물리적 또는 전기적 접촉을 하고 있는 것을 의미할 수 있다. 그러나, "연결된"은 또한 2개 이상의 엘리먼트들이 상호 직접 접촉하고 있지 않지만, 여전히 서로 협력 또는 상호작용할 수 있음을 의미할 수 있다.
"및/또는"이란 용어가 사용되었을 수 있다. 본 명세서에서 사용되는 바와 같이, "및/또는"이란 용어는 하나 또는 나머지 또는 양자 모두를 의미한다(예를 들어, A 및/또는 B는 A 또는 B 또는 A와 B 양자 모두를 의미한다).
위의 설명에서, 설명의 목적으로, 본 발명의 실시예들의 철저한 이해를 제공하기 위하여 다수의 특정 상세들이 설명되었다. 그러나, 하나 이상의 다른 실시예들이 이러한 특정 상세들 중 일부가 없이 실시될 수 있다는 점이 이 기술분야의 통상의 기술자들에게 명백할 것이다. 설명된 특정 실시예들은 본 발명을 제한하기 위하여 제공되지 않고 이를 설명하기 위하여 제공된다. 본 발명의 범위는 위에 제공되는 특정 예들에 의해 결정되지 않고, 아래 청구범위에 의해서만 결정된다. 도면들에 도시되고 명세서에 설명되는 것에 대한 모든 동등한 관계는 본 발명의 실시예들 내에 포함된다. 다른 경우들에서는, 설명의 이해를 불명료하게 하지 않도록 하기 위해, 잘 알려진 회로들, 구조들, 디바이스들 및 연산들은 블럭도 형태로 도시되거나 상세사항 없이 도시되었다.
적절한 것으로 간주되는 경우, 참조 번호들 또는 참조 번호들의 끝 부분들은, 달리 특정되거나 명백히 분명하지 않는 한, 옵션으로 유사하거나 동일한 특성들을 가질 수 있는, 대응하는 또는 유사한 엘리먼트들을 나타내기 위해 도면들 사이에서 반복되었다. 일부 경우들에서, 다수 컴포넌트들이 도시되고 설명되는 곳에서, 그들은 단일의 컴포넌트에 통합될 수 있다. 다른 경우들에서, 단일의 컴포넌트가 도시되고 설명되는 곳에서, 이는 2 이상의 컴포넌트들로 분리될 수 있다. 도면에서, 화살표들은 연결들을 나타내고 양방향 화살표들은 양방향 연결들을 나타낸다.
다양한 연산들 및 방법들이 설명되었다. 방법들 중 일부는 흐름도에서 비교적 기본적인 형태로 개시되었지만, 연산들이 옵션으로 이러한 방법들에 추가될 수 있거나 및/또는 제거될 수 있다. 또한, 흐름도는 예시적인 실시예에 따라 특정한 순서의 연산들을 나타내지만, 이러한 특정한 순서는 예시적라는 점이 이해되어야 한다. 대안적인 실시예들은 옵션으로, 이러한 연산들을 상이한 순서로 수행할 수 있고, 특정 연산들을 조합할 수 있고, 특정 연산들을 중첩할 수 있는 등등이다. 많은 변형들 및 적응들이 이러한 방법들에 이루어질 수 있고, 고려된다.
본 명세서에 걸쳐서 "하나의 실시예", "일 실시예", 또는 "하나 이상의 실시예"란, 예를 들어, 특정 특징이 본 발명의 실시에 포함될 수 있다는 점을 의미하는 것이 인식되어야 한다. 유사하게, 설명에서, 개시를 간소화하고 다양한 본 발명의 진보적인 양상들의 이해를 돕기 위하여 다양한 특징들은 때때로 단일 실시예, 도면, 또는 그의 설명에서 함께 그룹화된다는 점이 이해되어야 한다. 그러나, 이러한 개시의 방법은 본 발명이 각 청구범위에 명백하게 언급되는 것보다 많은 특징들을 요구하는 의도를 반영하는 것으로서 해석되어서는 안 된다. 오히려, 이하의 청구범위들이 반영하는 바에 따라, 진보적인 양상들은 단일의 개시된 실시예의 모든 특징보다 적게 놓일 수 있다. 따라서, 상세한 설명을 뒤따르는 청구범위들은 이로써 본 상세한 설명 내로 명백하게 통합되고, 각 청구범위 본 발명의 개별 실시예로서 자립한다.

Claims (34)

  1. 프로세서로서,
    복수의 패킹된 데이터 레지스터들;
    명령어를 디코드하는 디코더 - 상기 명령어는 SHA2(Secure Hash Algorithm 2) 해시 알고리즘의 현재 라운드 (i)에 대한 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)을 포함하는 제1 128 비트 소스 패킹된 데이터를 표시하고, 상기 SHA2 해시 알고리즘의 상기 현재 라운드에 대한 상태 데이터 엘리먼트들 (ci, di, gi 및 hi)을 포함하는 제2 128 비트 소스 패킹된 데이터를 표시하고, 제1 합과 제2 합을 포함하는 제3 128 비트 소스 패킹된 데이터를 표시하고, 상기 제1 합은 상기 현재 라운드에 대한 메시지 입력 (W(i)) 더하기 상기 현재 라운드에 대한 상수 입력(K(i))을 포함하고, 상기 제2 합은 상기 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 상기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)을 포함함 - ; 및
    상기 복수의 패킹된 데이터 레지스터들과 결합되고, 상기 디코더와 결합된 실행 유닛 - 상기 실행 유닛은 상기 명령어가 디코드되는 것에 응답하여, 128 비트 결과 패킹된 데이터를 저장하도록 동작가능하고, 상기 128 비트 결과 패킹된 데이터는 상기 SHA2 해시 알고리즘의 2라운드만큼 대응하는 상기 상태 데이터 엘리먼트들 (ai, bi, ei 및 fi)로부터 업데이트된, 업데이트된 상태 데이터 엘리먼트들 (ai +2, bi+2, ei +2 및 fi + 2)을 포함함 -
    을 포함하는 프로세서.
  2. 제1항에 있어서,
    ai는 상기 제1 128 비트 소스 패킹된 데이터의 비트 [127:96]내에 저장되고, bi는 상기 제1 128 비트 소스 패킹된 데이터의 비트 [95:64]에 저장되고, ei는 상기 제1 128 비트 소스 패킹된 데이터의 비트 [63:32]에 저장되고, fi는 상기 제1 128 비트 소스 패킹된 데이터의 비트 [31:0]에 저장되는, 프로세서.
  3. 제2항에 있어서,
    ci는 상기 제2 128 비트 소스 패킹된 데이터의 비트 [127:96]내에 저장되고, di는 상기 제2 128 비트 소스 패킹된 데이터의 비트 [95:64]에 저장되고, gi는 상기 제2 128 비트 소스 패킹된 데이터의 비트 [63:32]에 저장되고, hi는 상기 제2 128 비트 소스 패킹된 데이터의 비트 [31:0]에 저장되는, 프로세서.
  4. 제3항에 있어서,
    상기 제1 합은 상기 제3 128 비트 소스 패킹된 데이터의 비트 [31:0]에 저장되고, 상기 제2 합은 상기 제3 128 비트 소스 패킹된 데이터의 비트 [63:32]에 저장되는, 프로세서.
  5. 제4항에 있어서,
    ai +2는 상기 128 비트 결과 패킹된 데이터의 비트 [127:96]내에 저장되고, bi+2는 상기 128 비트 결과 패킹된 데이터의 비트 [95:64]에 저장되고, ei +2는 상기 128 비트 결과 패킹된 데이터의 비트 [63:32]에 저장되고, fi +2는 상기 128 비트 결과 패킹된 데이터의 비트 [31:0]에 저장되는, 프로세서.
  6. 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 제1, 제2, 및 제3 128 비트 소스 패킹된 데이터 중 하나를 저장하기 위해 사용되는 패킹된 데이터 레지스터는 상기 명령어에 내재된, 프로세서.
  7. 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 제1, 제2, 및 제3 128 비트 소스 패킹된 데이터 중 하나를 저장하기 위해 사용되는 패킹된 데이터 레지스터는 상기 128 비트 결과 패킹된 데이터를 저장하기 위한 목적지로 재사용되는, 프로세서.
  8. 장치로서,
    제1 명령어 세트의 제1 명령어를 제2 다른 명령어 세트의 하나 이상의 대응되는 명령어들로 변환하는 명령어 변환기 - 상기 제1 명령어는 SHA2 해시 알고리즘의 현재 라운드 (i)에 대한 상태 데이터 엘리먼트들(ai, bi, ei 및 fi)을 포함하는 제1 128 비트 소스 패킹된 데이터를 표시하고, 상기 SHA2 해시 알고리즘의 상기 현재 라운드에 대한 상태 데이터 엘리먼트들 (ci, di, gi 및 hi)을 포함하는 제2 128 비트 소스 패킹된 데이터를 표시하고, 제1 합과 제2 합을 포함하는 제3 128 비트 소스 패킹된 데이터를 표시하고, 상기 제1 합은 상기 현재 라운드에 대한 메시지 입력 (W(i)) 더하기 상기 현재 라운드에 대한 상수 입력 (K(i))을 포함하고, 상기 제2 합은 상기 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 상기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)을 포함함 - ; 및
    상기 명령어 변환기와 결합되는 프로세서 - 상기 프로세서는 128 비트 결과 패킹된 데이터를 저장하도록 상기 제2 다른 명령어 세트의 상기 하나 이상의 대응되는 명령어들을 디코드하고 실행하고, 상기 128 비트 결과 패킹된 데이터는 상기 SHA2 해시 알고리즘의 2라운드만큼 대응하는 상기 상태 데이터 엘리먼트들 (ai, bi, ei 및 fi)로부터 업데이트된, 업데이트된 상태 데이터 엘리먼트들 (ai +2, bi +2, ei +2 및 fi + 2)을 포함함 -
    를 포함하는 장치.
  9. 제8항에 있어서,
    ai는 상기 제1 128 비트 소스 패킹된 데이터의 비트 [127:96]내에 저장되고, bi는 상기 제1 128 비트 소스 패킹된 데이터의 비트 [95:64]에 저장되고, ei는 상기 제1 128 비트 소스 패킹된 데이터의 비트 [63:32]에 저장되고, fi는 상기 제1 128 비트 소스 패킹된 데이터의 비트 [31:0]에 저장되는, 장치.
  10. 제9항에 있어서,
    ci는 상기 제2 128 비트 소스 패킹된 데이터의 비트 [127:96]내에 저장되고, di는 상기 제2 128 비트 소스 패킹된 데이터의 비트 [95:64]에 저장되고, gi는 상기 제2 128 비트 소스 패킹된 데이터의 비트 [63:32]에 저장되고, hi는 상기 제2 128 비트 소스 패킹된 데이터의 비트 [31:0]에 저장되는, 장치.
  11. 제10항에 있어서,
    상기 제1 합은 상기 제3 128 비트 소스 패킹된 데이터의 비트 [31:0]에 저장되고, 상기 제2 합은 상기 제3 128 비트 소스 패킹된 데이터의 비트 [63:32]에 저장되는, 장치.
  12. 제8항 내지 제11항 중 어느 한 항에 있어서,
    ai +2는 상기 128 비트 결과 패킹된 데이터의 비트 [127:96]내에 저장되고, bi+2는 상기 128 비트 결과 패킹된 데이터의 비트 [95:64]에 저장되고, ei +2는 상기 128 비트 결과 패킹된 데이터의 비트 [63:32]에 저장되고, fi +2는 상기 128 비트 결과 패킹된 데이터의 비트 [31:0]에 저장되는, 장치.
  13. 프로세서로서,
    복수의 패킹된 데이터 레지스터들;
    명령어를 디코드하는 디코더 - 상기 명령어는 SHA2 해시 알고리즘의 현재 라운드 (i)에 대한 상태 데이터 엘리먼트들(gi, hi, 및 ci)을 포함하는 제1 패킹된 데이터의 제1 소스를 표시하고, 상기 제1 패킹된 데이터는 상기 SHA2 해시 알고리즘의 8개 상태 데이터 엘리먼트들(ai, bi, ci, di, ei, fi, gi 및 hi)의 조합된 비트폭보다 작은 비트폭을 갖고, 상기 명령어는 상기 현재 라운드에 대한 그리고 상기 현재 라운드 이후 1 라운드에 대한 메시지 및 상수 입력들을 나타내는 제2 패킹된 데이터의 제2 소스를 표시하고, 상기 제1 소스 및 상기 제2 소스 중 적어도 하나는 상기 상태 데이터 엘리먼트 ei 및 fi를 포함함 - ; 및
    상기 복수의 패킹된 데이터 레지스터들 및 상기 디코더와 결합된 실행 유닛 - 상기 실행 유닛은 상기 명령어에 의해 표시된 목적지에 결과를 저장하도록 상기 명령어에 응답하여 동작가능하고, 상기 결과는,
    상기 상태 데이터 엘리먼트 hi 더하기 상기 현재 라운드에 대한 메시지 입력(W(i)) 더하기 상기 현재 라운드에 대한 상수 입력(K(i)) 더하기 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트들(ei, fi 및 gi)을 갖는 Ch 함수의 값(evaluation) 더하기 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트 ei를 갖는 Σ1 함수의 값을 포함하는 제1 합; 및
    상기 상태 데이터 엘리먼트 gi 더하기 상기 현재 라운드 이후 1 라운드에 대한 메시지 입력 W(i+1) 더하기 상기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)를 포함하는 제2 합을 포함함 - 을 포함하는,
    프로세서.
  14. 제13항에 있어서,
    상기 제1 패킹된 데이터는 상기 상태 데이터 엘리먼트 di를 포함하는, 프로세서.
  15. 제13항에 있어서,
    상기 실행 유닛은 상기 제1 패킹된 데이터로부터 상기 결과로 2개의 추가적인 상태 데이터 엘리먼트들을 저장하도록 동작가능한, 프로세서.
  16. 제13항 내지 제15항 중 어느 한 항에 있어서,
    상기 제1 패킹된 데이터의 비트폭은 상기 8개 상태 데이터 엘리먼트들의 조합된 비트폭의 절반이고, 상기 명령어는 상기 제1 및 제2 소스만을 소스로 표시하는, 프로세서.
  17. 프로세서로서,
    복수의 패킹된 데이터 레지스터들;
    명령어를 디코드하는 디코더 - 상기 명령어는 제1 패킹된 데이터 및 제2 패킹된 데이터를 표시하고, 상기 제1 및 제2 패킹된 데이터는,
    SHA2 해시 알고리즘의 현재 라운드 (i)에 대한 메시지 입력의 합 W(i) 더하기 상기 현재 라운드에 대한 상수 입력 K(i) 더하기 상기 현재 라운드에 대한 상태 데이터 엘리먼트 hi 더하기 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트들(ei, fi 및 gi)을 갖는 Ch 함수의 값 더하기 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트 ei를 갖는 시그마1 함수의 값을 나타내는 제1 데이터 엘리먼트;
    상기 현재 라운드 이후 1 라운드에 대한 메시지 입력의 합 W(i+1) 더하기 상기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1) 더하기 상기 현재 라운드에 대한 상태 데이터 엘리먼트 gi를 나타내는 제2 데이터 엘리먼트; 및
    상기 현재 라운드에 대한 상태 데이터 엘리먼트들 (ai, bi, ci, 및 di), 상기 현재 라운드에 대한 상태 데이터 엘리먼트 ei, 및 상기 현재 라운드에 대한 상태 데이터 엘리먼트 fi를 포함함 - ; 및
    상기 복수의 패킹된 데이터 레지스터들 및 상기 디코더와 결합된 실행 유닛 - 상기 실행 유닛은 상기 명령어에 의해 표시된 목적지 저장 장소에 결과 패킹된 데이터를 저장하도록 상기 명령어에 응답하여 동작가능하고, 상기 결과 패킹된 데이터는 상기 SHA2 해시 알고리즘의 2라운드만큼 대응하는 상기 현재 라운드에 대한 4개의 상태 데이터 엘리먼트들로부터 업데이트된, 업데이트된 4개의 상태 데이터 엘리먼트들을 포함함 - 을 포함하는,
    프로세서.
  18. 제17항에 있어서,
    상기 실행 로직은, 상기 명령어에 응답하여, 상기 SHA2 해시 알고리즘의 2라운드만큼 상기 상태 데이터 엘리먼트들 (ei, fi, gi 및 hi)로부터 각각 업데이트된, ei+2, fi +2, gi +2 및 hi +2인 상기 4개의 업데이트된 상태 데이터 엘리먼트들을 포함하는 상기 결과 패킹된 데이터를 저장하는, 프로세서.
  19. 제17항에 있어서,
    상기 실행 로직은, 상기 명령어에 응답하여, 상기 SHA2 해시 알고리즘의 2라운드만큼 상기 상태 데이터 엘리먼트들 (ai, bi, ci 및 di)로부터 각각 업데이트된, ai+2, bi +2, ci +2 및 di +2인 상기 4개의 업데이트된 상태 데이터 엘리먼트들을 포함하는 상기 결과 패킹된 데이터를 저장하는, 프로세서.
  20. 제17항에 있어서,
    상기 상태 데이터 엘리먼트 ei 및 fi는 상기 제1 데이터 엘리먼트와 상기 제2 데이터 엘리먼트와 함께 패킹된 데이터에 포함되는, 프로세서.
  21. 제17항에 있어서,
    상기 상태 데이터 엘리먼트들 (ai, bi, ci 및 di)는 상기 제1 및 제2 패킹된 데이터 중 하나에 있고, 상기 상태 데이터 엘리먼트 ei 및 fi는 상기 제1 및 제2 패킹된 데이터 중 다른 하나에 있는, 프로세서.
  22. 프로세서로서,
    복수의 패킹된 데이터 레지스터들;
    명령어를 디코드하는 디코더 - 상기 명령어는 제1 패킹된 데이터 및 제2 패킹된 데이터만을 소스 패킹된 데이터로 표시하고, 상기 제1 및 제2 패킹된 데이터는, SHA2 해시 알고리즘의 현재 라운드 (i)에 대한 메시지 입력의 합 W(i) 더하기 상기 현재 라운드에 대한 상수 입력 K(i) 더하기 상기 현재 라운드에 대한 상태 데이터 엘리먼트 hi 더하기 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트들(ei, fi 및 gi)을 갖는 Ch 함수의 값 더하기 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트 ei를 갖는 시그마1 함수의 값을 나타내는 제1 데이터 엘리먼트;
    상기 현재 라운드 이후 1 라운드에 대한 메시지 입력의 합 W(i+1) 더하기 상기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1) 더하기 상기 현재 라운드에 대한 상태 데이터 엘리먼트 gi를 나타내는 제2 데이터 엘리먼트; 및
    상기 현재 라운드에 대한 상태 데이터 엘리먼트들 (ai, bi, ci, 및 di), 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트 ei, 및 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트 fi를 포함하고, 상기 제1 및 제2 패킹된 데이터 각각은 상기 상태 데이터 엘리먼트 ai가 32비트 상태 데이터 엘리먼트일 때 128 비트 패킹된 데이터이거나 상기 상태 데이터 엘리먼트 ai가 64비트 상태 데이터 엘리먼트일 때 256비트 패킹된 데이터임 - ; 및
    상기 패킹된 데이터 레지스터들 및 상기 디코더와 결합된 실행 유닛 - 상기 실행 유닛은 상기 명령어에 의해 표시된 목적지 저장 장소에 결과 패킹된 데이터를 저장하도록 상기 명령어에 응답하여 동작가능하고, 상기 결과 패킹된 데이터는 상기 SHA2 해시 알고리즘의 2라운드만큼 상기 상태 데이터 엘리먼트들 (ei, fi, gi, 및 hi)로부터 각각 업데이트된, 상태 데이터 엘리먼트들(ei +2, fi +2, gi +2, hi + 2)을 포함함 - 을 포함하는,
    프로세서.
  23. 제22항에 있어서,
    상기 상태 데이터 엘리먼트 ei 및 fi는 상기 제1 데이터 엘리먼트 및 상기 제2 데이터 엘리먼트와 함께 패킹된 데이터에 포함되는, 프로세서.
  24. 제22항에 있어서,
    상기 상태 데이터 엘리먼트 ei +2는 상기 결과 패킹된 데이터 내에서 상기 제1 및 제2 패킹된 데이터 중 하나 내에 상기 상태 데이터 엘리먼트 ei가 저장되는 것과 동일한 비트 위치에 저장되는, 프로세서.
  25. 제22항에 있어서,
    상기 상태 데이터 엘리먼트들 (ai, bi, ci 및 di)는 상기 제1 및 제2 패킹된 데이터 중 하나에 있고, 상기 상태 데이터 엘리먼트 ei 및 fi는 상기 제1 및 제2 패킹된 데이터 중 다른 하나에 있는, 프로세서.
  26. 프로세서로서,
    복수의 패킹된 데이터 레지스터들;
    명령어를 디코드하는 디코더 - 상기 명령어는 제1 패킹된 데이터 및 제2 패킹된 데이터만을 소스 패킹된 데이터로 표시하고, 상기 제1 및 제2 패킹된 데이터는, SHA2 해시 알고리즘의 현재 라운드 (i)에 대한 메시지 입력의 합 W(i) 더하기 상기 현재 라운드에 대한 상수 입력 K(i) 더하기 상기 현재 라운드에 대한 상태 데이터 엘리먼트 hi 더하기 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트들(ei, fi 및 gi)을 갖는 Ch 함수의 값 더하기 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트 ei를 갖는 시그마1 함수의 값을 나타내는 제1 데이터 엘리먼트;
    상기 현재 라운드 이후 1 라운드에 대한 메시지 입력의 합 W(i+1) 더하기 상기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1) 더하기 상기 현재 라운드에 대한 상태 데이터 엘리먼트 gi를 나타내는 제2 데이터 엘리먼트; 및
    상기 현재 라운드에 대한 상태 데이터 엘리먼트들(ai, bi, ci, 및 di), 상기 현재 라운드에 대한 상태 데이터 엘리먼트 ei, 및 상기 현재 라운드에 대한 상태 데이터 엘리먼트 fi를 포함하고, 상기 제1 및 제2 패킹된 데이터 각각은 상기 상태 데이터 엘리먼트 ai가 32비트 상태 데이터 엘리먼트일 때 128 비트 패킹된 데이터이거나 상기 상태 데이터 엘리먼트 ai가 64비트 상태 데이터 엘리먼트일 때 256비트 패킹된 데이터임 - ; 및
    상기 패킹된 데이터 레지스터들 및 상기 디코더와 결합된 실행 유닛 - 상기 실행 유닛은 상기 명령어에 의해 표시된 목적지 저장 장소에 결과 패킹된 데이터를 저장하도록 상기 명령어에 응답하여 동작가능하고, 상기 결과 패킹된 데이터는 상기 SHA2 해시 알고리즘의 2라운드만큼 상기 상태 데이터 엘리먼트들 (ai, bi, ci, 및 di)로부터 각각 업데이트된, 상태 데이터 엘리먼트들(ai+2, bi+2, ci+2, 및 di + 2)을 포함함 - 을 포함하는,
    프로세서.
  27. 제26항에 있어서,
    상기 상태 데이터 엘리먼트 ei 및 fi는 상기 제1 데이터 엘리먼트 및 상기 제2 데이터 엘리먼트와 함께 패킹된 데이터에 포함되는, 프로세서.
  28. 제26항에 있어서,
    상기 상태 데이터 엘리먼트 ai +2는 상기 결과 패킹된 데이터 내에서 상기 제1 및 제2 패킹된 데이터 중 하나 내에 상기 상태 데이터 엘리먼트 ai가 저장되는 것과 동일한 비트 위치에 저장되는, 프로세서.
  29. 제26항에 있어서,
    상기 상태 데이터 엘리먼트들 (ai, bi, ci 및 di)는 상기 제1 및 제2 패킹된 데이터 중 하나에 있고, 상기 상태 데이터 엘리먼트 ei 및 fi는 상기 제1 및 제2 패킹된 데이터 중 다른 하나에 있는, 프로세서.
  30. 프로세서로서,
    복수의 패킹된 데이터 레지스터들;
    명령어를 디코드하는 디코더 - 상기 명령어는 제1 패킹된 데이터 및 제2 패킹된 데이터를 표시하고, 상기 제1 및 제2 패킹된 데이터는,
    SHA2 해시 알고리즘의 현재 라운드 (i)에 대한 메시지 입력의 합 W(i) 더하기 상기 현재 라운드에 대한 상수 입력 K(i)를 나타내는 제1 데이터 엘리먼트;
    상기 현재 라운드 이후 1 라운드에 대한 메시지 입력의 합 W(i+1) 더하기 상기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1)을 나타내는 제2 데이터 엘리먼트; 및
    상기 현재 라운드에 대한 상태 데이터 엘리먼트들 (ei, fi, gi, 및 hi)를 포함함 -; 및
    상기 패킹된 데이터 레지스터들 및 상기 디코더와 결합된 실행 유닛 - 상기 실행 유닛은 상기 명령어에 의해 표시된 목적지 저장 장소에 결과 패킹된 데이터를 저장하도록 상기 명령어에 응답하여 동작가능하고, 상기 결과 패킹된 데이터는,
    상기 현재 라운드에 대한 상기 메시지 입력의 합 W(i) 더하기 상기 현재 라운드에 대한 상기 상수 입력 K(i) 더하기 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트 hi 더하기 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트들(ei, fi 및 gi)을 갖는 Ch 함수의 값 더하기 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트 ei를 갖는 시그마1 함수의 값을 나타내는 제1 결과 데이터 엘리먼트;
    상기 현재 라운드 이후 1 라운드에 대한 메시지 입력의 합 W(i+1) 더하기 상기 현재 라운드 이후 1 라운드에 대한 상수 입력 K(i+1) 더하기 상기 현재 라운드에 대한 상태 데이터 엘리먼트 gi를 나타내는 제2 데이터 엘리먼트를 포함함 - 을 포함하는,
    프로세서.
  31. 제30항에 있어서,
    상기 목적지 저장 장소는 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트 gi 및 hi를 저장하고 상기 제1 및 제2 패킹된 데이터 중 하나를 저장하기 위해 또한 사용된 패킹된 데이터 레지스터이고, 상기 제1 및 제2 결과 데이터 엘리먼트는 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트 gi 및 hi 상에 저장되는, 프로세서.
  32. 제30항에 있어서,
    상기 결과 패킹된 데이터는 상기 현재 라운드에 대한 상기 상태 데이터 엘리먼트 ei 및 fi를 또한 포함하는, 프로세서.
  33. 제30항에 있어서,
    상기 상태 데이터 엘리먼트들 (ei, fi, gi 및 hi)는 상기 제1 및 제2 패킹된 데이터 중 하나에 있고, 상기 제1 및 제2 데이터 엘리먼트는 상기 제1 및 제2 패킹된 데이터 중 다른 하나에 있는, 프로세서.
  34. 제30항에 있어서,
    상기 명령어는 상기 제1 및 제2 패킹된 데이터만을 소스 패킹된 데이터로 표시하고, (1) 상기 제1 및 제2 패킹된 데이터 각각이 128 비트 패킹된 데이터이고 상기 상태 데이터 엘리먼트 ei가 32비트 상태 데이터 엘리먼트이거나, 또는 (2) 상기 제1 및 제2 패킹된 데이터 각각이 256 비트 패킹된 데이터이고 상기 상태 데이터 엘리먼트 ei가 64 비트 상태 데이터 엘리먼트인, 프로세서.
KR1020177010445A 2012-12-28 2013-06-18 보안 해시 알고리즘들을 처리하는 명령어 프로세서들, 방법들 및 시스템들 KR101846392B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/729,502 US9251377B2 (en) 2012-12-28 2012-12-28 Instructions processors, methods, and systems to process secure hash algorithms
US13/729,502 2012-12-28
PCT/US2013/046410 WO2014105135A1 (en) 2012-12-28 2013-06-18 Instructions processors, methods, and systems to process secure hash algorithms

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020157013432A Division KR101729331B1 (ko) 2012-12-28 2013-06-18 보안 해시 알고리즘들을 처리하는 명령어 프로세서들, 방법들 및 시스템들

Publications (2)

Publication Number Publication Date
KR20170046185A true KR20170046185A (ko) 2017-04-28
KR101846392B1 KR101846392B1 (ko) 2018-04-09

Family

ID=51017219

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020157013432A KR101729331B1 (ko) 2012-12-28 2013-06-18 보안 해시 알고리즘들을 처리하는 명령어 프로세서들, 방법들 및 시스템들
KR1020177010445A KR101846392B1 (ko) 2012-12-28 2013-06-18 보안 해시 알고리즘들을 처리하는 명령어 프로세서들, 방법들 및 시스템들

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020157013432A KR101729331B1 (ko) 2012-12-28 2013-06-18 보안 해시 알고리즘들을 처리하는 명령어 프로세서들, 방법들 및 시스템들

Country Status (5)

Country Link
US (6) US9251377B2 (ko)
KR (2) KR101729331B1 (ko)
CN (2) CN108830112B (ko)
DE (1) DE112013005428T5 (ko)
WO (1) WO2014105135A1 (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
GB2497070B (en) * 2011-11-17 2015-11-25 Advanced Risc Mach Ltd Cryptographic support instructions
US9251377B2 (en) 2012-12-28 2016-02-02 Intel Corporation Instructions processors, methods, and systems to process secure hash algorithms
US10503510B2 (en) 2013-12-27 2019-12-10 Intel Corporation SM3 hash function message expansion processors, methods, systems, and instructions
US9853974B2 (en) * 2014-01-27 2017-12-26 Cryptography Research, Inc. Implementing access control by system-on-chip
US10482275B2 (en) 2014-01-27 2019-11-19 Cryptography Research, Inc. Implementing access control by system-on-chip
US9513913B2 (en) 2014-07-22 2016-12-06 Intel Corporation SM4 acceleration processors, methods, systems, and instructions
US9317719B2 (en) 2014-09-04 2016-04-19 Intel Corporation SM3 hash algorithm acceleration processors, methods, systems, and instructions
US9658854B2 (en) 2014-09-26 2017-05-23 Intel Corporation Instructions and logic to provide SIMD SM3 cryptographic hashing functionality
US9467279B2 (en) 2014-09-26 2016-10-11 Intel Corporation Instructions and logic to provide SIMD SM4 cryptographic block cipher functionality
KR102307105B1 (ko) * 2015-08-19 2021-09-29 인텔 코포레이션 Simd sm3 암호화 해싱 기능을 제공하기 위한 명령어 및 로직
US10020934B2 (en) * 2015-11-05 2018-07-10 Intel Corporation Hardware accelerator for cryptographic hash operations
US20170286118A1 (en) * 2016-04-01 2017-10-05 Intel Corporation Processors, methods, systems, and instructions to fetch data to indicated cache level with guaranteed completion
US10476525B2 (en) * 2017-01-09 2019-11-12 Qualcomm Incorporated Low latency bit-reversed polar codes
CN110473120A (zh) * 2018-05-10 2019-11-19 深圳富桂精密工业有限公司 基于工业互联网的微服务异构再生系统、方法及存储介质
GB2582900A (en) * 2019-03-18 2020-10-14 Pqshield Ltd Cryptography using a cryptographic state
US10824428B2 (en) 2019-03-29 2020-11-03 Intel Corporation Apparatuses, methods, and systems for hashing instructions
US11329987B2 (en) * 2019-07-08 2022-05-10 Bank Of America Corporation Protecting enterprise computing resources by implementing an optical air gap system
JP7383949B2 (ja) * 2019-09-20 2023-11-21 富士電機株式会社 情報処理装置及びプログラム
DE102021100538A1 (de) * 2021-01-13 2022-07-14 Infineon Technologies Ag Schaltung und verfahren zur rotationsinvarianten ausführung einer oder mehrerer operationen mit mindestens einem operanden
US20220416999A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Fused instruction to accelerate performance of secure hash algorithm 2 (sha-2) workloads in a graphics environment

Family Cites Families (58)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE2458331A1 (de) 1973-12-13 1975-06-19 Honeywell Inf Systems Datenverarbeitungssystem zur adressierung eines in einem sekundaerspeicher abgelegten datensatzes
US4250483A (en) 1978-01-30 1981-02-10 Rubner Anthony C System for signalized intersection control
DE68926200T2 (de) 1988-08-11 1996-10-17 Ibm Geheime Datenübertragung mittels Steuervektoren
US5339398A (en) 1989-07-31 1994-08-16 North American Philips Corporation Memory architecture and method of data organization optimized for hashing
US5349642A (en) 1992-11-03 1994-09-20 Novell, Inc. Method and apparatus for authentication of client server communication
US5608801A (en) 1995-11-16 1997-03-04 Bell Communications Research, Inc. Efficient cryptographic hash functions and methods for amplifying the security of hash functions and pseudo-random functions
US5920900A (en) 1996-12-30 1999-07-06 Cabletron Systems, Inc. Hash-based translation method and apparatus with multiple level collision resolution
US5897637A (en) 1997-03-07 1999-04-27 Apple Computer, Inc. System and method for rapidly identifying the existence and location of an item in a file
US6067547A (en) 1997-08-12 2000-05-23 Microsoft Corporation Hash table expansion and contraction for use with internal searching
US5960434A (en) 1997-09-26 1999-09-28 Silicon Graphics, Inc. System method and computer program product for dynamically sizing hash tables
US6260055B1 (en) 1997-10-15 2001-07-10 Kabushiki Kaisha Toshiba Data split parallel shifter and parallel adder/subtractor
US6226710B1 (en) 1997-11-14 2001-05-01 Utmc Microelectronic Systems Inc. Content addressable memory (CAM) engine
US6360218B1 (en) 1998-10-26 2002-03-19 Microsoft Corporation Compact record format for low-overhead databases
US6307955B1 (en) 1998-12-18 2001-10-23 Topaz Systems, Inc. Electronic signature management system
US7065633B1 (en) 1999-01-28 2006-06-20 Ati International Srl System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU
US6578131B1 (en) 1999-04-27 2003-06-10 Microsoft Corporation Scaleable hash table for shared-memory multiprocessor system
US6983350B1 (en) 1999-08-31 2006-01-03 Intel Corporation SDRAM controller for parallel processor architecture
US6631419B1 (en) 1999-09-22 2003-10-07 Juniper Networks, Inc. Method and apparatus for high-speed longest prefix and masked prefix table search
US6594665B1 (en) 2000-02-18 2003-07-15 Intel Corporation Storing hashed values of data in media to allow faster searches and comparison of data
US6952770B1 (en) 2000-03-14 2005-10-04 Intel Corporation Method and apparatus for hardware platform identification with privacy protection
US6470329B1 (en) 2000-07-11 2002-10-22 Sun Microsystems, Inc. One-way hash functions for distributed data synchronization
US20020032551A1 (en) 2000-08-07 2002-03-14 Jabari Zakiya Systems and methods for implementing hash algorithms
US7681018B2 (en) 2000-08-31 2010-03-16 Intel Corporation Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set
DE60213762T2 (de) 2001-01-12 2007-10-04 Broadcom Corp., Irvine Implementierung des SHA1 Algorithmusses
US7073059B2 (en) 2001-06-08 2006-07-04 Hewlett-Packard Development Company, L.P. Secure machine platform that interfaces to operating systems and customized control programs
US7240203B2 (en) 2001-07-24 2007-07-03 Cavium Networks, Inc. Method and apparatus for establishing secure sessions
US7395412B2 (en) 2002-03-08 2008-07-01 Ip-First, Llc Apparatus and method for extending data modes in a microprocessor
US7400722B2 (en) 2002-03-28 2008-07-15 Broadcom Corporation Methods and apparatus for performing hash operations in a cryptography accelerator
JP4564756B2 (ja) 2002-04-18 2010-10-20 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド セキュア実行モードで動作し得るプロセッサを含むコンピュータシステムの初期化方法
US7165135B1 (en) 2002-04-18 2007-01-16 Advanced Micro Devices, Inc. Method and apparatus for controlling interrupts in a secure execution mode-capable processor
US7373514B2 (en) 2003-07-23 2008-05-13 Intel Corporation High-performance hashing system
US7921300B2 (en) 2003-10-10 2011-04-05 Via Technologies, Inc. Apparatus and method for secure hash algorithm
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
US7725624B2 (en) 2005-12-30 2010-05-25 Intel Corporation System and method for cryptography processing units and multiplier
US8073892B2 (en) 2005-12-30 2011-12-06 Intel Corporation Cryptographic system, method and multiplier
US7949701B2 (en) 2006-08-02 2011-05-24 Qualcomm Incorporated Method and system to perform shifting and rounding operations within a microprocessor
US8020142B2 (en) 2006-12-14 2011-09-13 Intel Corporation Hardware accelerator
US7949130B2 (en) 2006-12-28 2011-05-24 Intel Corporation Architecture and instruction set for implementing advanced encryption standard (AES)
US7970128B2 (en) * 2007-07-20 2011-06-28 Freescale Semiconductor, Inc. Systems and methods for efficient generation of hash values of varying bit widths
US8363827B2 (en) * 2007-12-03 2013-01-29 Intel Corporation Method and apparatus for generic multi-stage nested hash processing
US8281109B2 (en) 2007-12-27 2012-10-02 Intel Corporation Compressed instruction format
CN100530164C (zh) * 2007-12-29 2009-08-19 中国科学院计算技术研究所 一种risc处理器及其寄存器标志位处理方法
US8340280B2 (en) 2008-06-13 2012-12-25 Intel Corporation Using a single instruction multiple data (SIMD) instruction to speed up galois counter mode (GCM) computations
EP2348499A4 (en) * 2008-10-07 2015-01-21 Fujitsu Ltd ENCRYPTION DEVICE
KR20100047592A (ko) 2008-10-29 2010-05-10 한국전자통신연구원 Sha 알고리즘 기반의 메시지 스케줄 연산 방법, 메시지 압축 연산 방법 및 이를 수행하는 암호장치
US8832464B2 (en) * 2009-03-31 2014-09-09 Oracle America, Inc. Processor and method for implementing instruction support for hash algorithms
US10532237B2 (en) 2010-08-05 2020-01-14 Victaulic Company Dual mode agent discharge system with multiple agent discharge capability
WO2012031632A2 (de) 2010-09-10 2012-03-15 Alfred Kärcher Gmbh & Co. Kg Aufnahmevorrichtung für eine abgabevorrichtung für reinigungsflüssigkeit
US9164725B2 (en) 2010-11-19 2015-10-20 International Business Machines Corporation Apparatus and method for calculating an SHA-2 hash function in a general purpose processor
WO2012135958A1 (en) 2011-04-06 2012-10-11 Certicom Corp. Efficient implementation of hash algorithm on a processor
US8855302B2 (en) 2011-06-21 2014-10-07 Intel Corporation Apparatus and method for Skein hashing
JP5988222B2 (ja) * 2011-10-18 2016-09-07 パナソニックIpマネジメント株式会社 シャッフルパターン生成回路、プロセッサ、シャッフルパターン生成方法、命令
GB2497070B (en) 2011-11-17 2015-11-25 Advanced Risc Mach Ltd Cryptographic support instructions
ES2886348T3 (es) 2012-03-30 2021-12-17 Intel Corp Procedimiento y aparato para procesar un algoritmo de hashing seguro SHA-2
US8838997B2 (en) 2012-09-28 2014-09-16 Intel Corporation Instruction set for message scheduling of SHA256 algorithm
US9251377B2 (en) 2012-12-28 2016-02-02 Intel Corporation Instructions processors, methods, and systems to process secure hash algorithms
US8924741B2 (en) 2012-12-29 2014-12-30 Intel Corporation Instruction and logic to provide SIMD secure hashing round slice functionality

Also Published As

Publication number Publication date
DE112013005428T5 (de) 2015-08-06
CN105051743A (zh) 2015-11-11
CN105051743B (zh) 2018-06-08
US9027104B2 (en) 2015-05-05
US10581594B2 (en) 2020-03-03
US20160162694A1 (en) 2016-06-09
KR101846392B1 (ko) 2018-04-09
US20170126400A1 (en) 2017-05-04
US20190116025A1 (en) 2019-04-18
KR20150079731A (ko) 2015-07-08
US9542561B2 (en) 2017-01-10
CN108830112B (zh) 2022-10-28
KR101729331B1 (ko) 2017-04-21
US20140185793A1 (en) 2014-07-03
US10911222B2 (en) 2021-02-02
US10009172B2 (en) 2018-06-26
CN108830112A (zh) 2018-11-16
US9251377B2 (en) 2016-02-02
WO2014105135A1 (en) 2014-07-03
US20200280432A1 (en) 2020-09-03
US20140189369A1 (en) 2014-07-03

Similar Documents

Publication Publication Date Title
US10911222B2 (en) Instructions processors, methods, and systems to process secure hash algorithms
US10372449B2 (en) Packed data operation mask concatenation processors, methods, systems, and instructions
JP5986688B2 (ja) Sha256アルゴリズムのメッセージスケジューリングのための命令セット
US9983873B2 (en) Systems, apparatuses, and methods for performing mask bit compression
US9100184B2 (en) Instructions processors, methods, and systems to process BLAKE secure hashing algorithm
KR101679111B1 (ko) 연산 마스크들의 마스킹되지 않는 요소들을 통합하기 위한 프로세서들, 방법들, 시스템들, 및 명령어들
JP2016531377A (ja) インデックス付きベクトルメモリアクセス及び算術及び/または論理演算プロセッサ、方法、システム、及び命令
WO2014105011A1 (en) Coalescing adjacent gather/scatter operations
US9760371B2 (en) Packed data operation mask register arithmetic combination processors, methods, systems, and instructions
WO2013095592A1 (en) Apparatus and method for vector compute and accumulate
KR101729424B1 (ko) 128-비트 프로세서에서의 skein256 sha3 알고리즘에 대한 명령어 세트
WO2013095575A1 (en) Broadcast operation on mask register
EP2919112A2 (en) Packed two source inter-element shift merge processors, methods, systems, and instructions
US20240211261A1 (en) Accelerating four-way parallel keccak execution on 256-bit vector processor
US20240211268A1 (en) Accelerating eight-way parallel keccak execution
US20240211253A1 (en) Accelerating keccak algorithms

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant