JP2010128392A - ハッシュ処理装置及びその方法 - Google Patents

ハッシュ処理装置及びその方法 Download PDF

Info

Publication number
JP2010128392A
JP2010128392A JP2008305624A JP2008305624A JP2010128392A JP 2010128392 A JP2010128392 A JP 2010128392A JP 2008305624 A JP2008305624 A JP 2008305624A JP 2008305624 A JP2008305624 A JP 2008305624A JP 2010128392 A JP2010128392 A JP 2010128392A
Authority
JP
Japan
Prior art keywords
hash
message
processing
value
block
Prior art date
Legal status (The legal status 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 status listed.)
Pending
Application number
JP2008305624A
Other languages
English (en)
Inventor
Shigeru Nishikawa
成 西川
Akiyoshi Kikuchi
明美 菊地
Akihiko Kumatoriya
昭彦 熊取谷
Shiori Wakino
しおり 脇野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
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 Canon Inc filed Critical Canon Inc
Priority to JP2008305624A priority Critical patent/JP2010128392A/ja
Priority to US12/625,687 priority patent/US8571207B2/en
Priority to CN200910253338.7A priority patent/CN101753291B/zh
Publication of JP2010128392A publication Critical patent/JP2010128392A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/20Manipulating the length of blocks of bits, e.g. padding or block truncation

Landscapes

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

Abstract

【課題】 複数のメッセージに対するハッシュ処理を適切に切り替えることが可能なハッシュ処理技術を提供する。
【解決手段】 メッセージのハッシュ値を計算するハッシュ処理装置であって、処理対象のメッセージから得られた拡張済みブロックを入力する入力手段と、入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理手段と、処理対象のメッセージについて前記ハッシュ処理手段が出力したハッシュ中間値を保持する複数の中間値保持手段と、処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力手段と、前記ハッシュ処理手段が出力したハッシュ中間値を保持させる中間値保持手段を切り替えて、複数のメッセージに対するハッシュ処理を制御するハッシュ処理制御手段と、を備える。
【選択図】 図1

Description

本発明はハッシュ処理装置及びその方法に関する。
(ハッシュ関数とは)
近年、一般家庭においても光ファイバ網へ安価に接続できるようになるなど、インターネットを支えるインフラが整備され、通信の高速化が急速に進んでいる。また様々なデジタル機器がネットワークにつながるようになり、インターネットを通したデジタル機器間の通信も頻繁におこなわれるようになっている。
このようなデジタル機器間の通信において必須な機能として、送受信されるメッセージの暗号化のほかに通信相手やメッセージの認証が求められている。このデジタル機器間の通信相手やメッセージの認証において、ハッシュ関数と呼ばれるアルゴリズムがよく使われている。
ハッシュ関数とは、任意ビット長のメッセージを入力して、固定ビット長のハッシュ値を出力するアルゴリズム(関数)である。このハッシュ関数においては以下に示す処理によりハッシュ値を求める。
1)入力となる任意ビット長のメッセージをアルゴリズムで定められたブロックのビット長の整数倍になるようにメッセージの最後尾に所定のデータを付け加える(パディング処理)。
2)パディング処理したメッセージをブロック単位で拡張し、拡張メッセージを生成する(メッセージ拡張処理)。
3)各ブロックに対応した拡張メッセージ(拡張済みブロック)を使用して内部状態変数値を初期値から変化させる処理をアルゴリズムで定められた回数繰り返す。尚、内部状態変数値の初期値としては、一番目のブロックに対してはアルゴリズムで定められた所定の固定値(以降、ハッシュ初期値と呼ぶ)を用いる。そして、二番目以降のブロックに対しては当該ブロックの1つ前のブロックに対する後述するハッシュ中間値を用いる(ステップ処理)。
4)1つ前のブロックに対する本加算処理結果(以降、これをハッシュ中間値と呼ぶ)に所定回数のステップ処理後の内部状態変数値を加算し、結果を新たなハッシュ中間値とする。尚、一番目のブロックに対しては、ハッシュ初期値に所定回数のステップ処理後の内部状態変数値を加算し、その結果をハッシュ中間値とする(加算処理)。
5)上記2)〜4)を全ブロックについて順次行う。このようにして、拡張メッセージ全ての処理が終了した時点でのハッシュ中間値がハッシュ値として出力される。
上記ハッシュ関数の1)から5)の処理をまとめてハッシュ処理という。なお、あるブロックに対するハッシュ関数の3)、4)の処理は、当該ブロックが先頭ブロックの場合はハッシュ初期値、2番目以降のブロックの場合は1つ前のブロックのハッシュ中間値があれば実行可能である。従って、ハッシュ処理は先頭ブロックからあるブロックまでのハッシュ中間値を求めた段階で処理を中断し、その後、当該ハッシュ中間値を用いて次のブロックから処理を再開することができる。
ハッシュ関数の主な特徴として、以下の3つが挙げられる。1つめは、メッセージからハッシュ値を計算することはできても、その逆、すなわち、出力されたハッシュ値から入力されたメッセージを逆算することは現実的に不可能なことである(一方向性)。2つめは、あるメッセージのハッシュ値が与えられたとき、そのハッシュ値を持つ別のメッセージを見つけ出すことが非常に困難なことである(弱衝突耐性)。3つめは、ハッシュ値が一致するような、異なる2つのメッセージを見つけ出すことが非常に困難なことである(強衝突耐性)。
このような性質をもつハッシュ関数は、SSL/TLS、IPSecなど各種通信プロトコルで使われている。使用できるハッシュ関数アルゴリズムは、通信プロトコル毎に規格で決まっている。デジタル機器間の通信では、各々のデジタル機器が採用している通信プロトコルで使用可能なハッシュアルゴリズムの中から、双方が備えているハッシュアルゴリズムを選び、認証処理の中で使用する。
また、通信の高速化が進行するにつれ、暗号通信においても通信速度を保証するニーズが高まってきており、処理するデータによって要求される応答時間も異なる。例えば、改竄検出のための大容量の画像データに対するハッシュ処理の応答時間はある程度の長さが許容される。しかし、本人認証のための短いパスワードに対するハッシュ処理の応答時間は極めて短いことが期待される。したがって、ハッシュ処理に関しても処理の高速化と優先度の高いデータに対する応答時間をできる限り短くすることが求められている。ハッシュ処理を高速化するためにはハードウエア処理することが必須となる。ハードウエアで実現すると回路規模がコストに直結するため、通常はハッシュ処理を実現するハッシュ処理回路等のハードウエアリソースはシステムに1つ用意され、複数のメッセージに対するハッシュ処理を当該1つのハードウエアリソースを共用して実現する。
上述したように、ハッシュ処理は任意ビット長のメッセージを固定ビット長のブロックに分割してブロック単位で処理する。そして全ブロックに対するハッシュ処理が終わったときに初めて、メッセージに対するハッシュ値が得られる。
(処理対象メッセージの切り替え)
ここで、上記のように複数のメッセージに対するハッシュ処理を1つのハードウエアリソースを用いて行う条件下で、非常に長いメッセージに対するハッシュ処理が始まった後に、優先度が高くて短いメッセージに対するハッシュ処理要求が入る場合を考える。このような場合、最初のメッセージに対するハッシュ処理に時間がかかり、優先度が高くて短いメッセージに対するハッシュ処理について、一定の応答時間を保証できなくなってしまう。そこで、一定の応答時間を保証するために、ハッシュ処理自体を高速化するとともに、処理対象となるメッセージに優先度をつけ、優先度の高いメッセージを先に処理する仕組みが必要である。例えば、最初に入力した長いメッセージのハッシュ処理を一旦中断し、優先度の高い短いメッセージに対するハッシュ処理を先に行い、当該短いメッセージに対する処理終了後に、長いメッセージに対するハッシュ処理を再開するといった仕組みである。
従来、ハッシュ処理等の暗号処理の中断・再開に関して、各種暗号アルゴリズムの違いや、暗号処理モードの違いによることなく、中断・再開機能を効率的に行うことができる暗号処理装置が知られている(特許文献1)。この構成では、DMAコントローラのディスクリプタにハッシュ処理の中断・再開を指示するフォーマットを設けている。そして、中断情報を付加してメッセージを転送した場合はメッセージの途中のあるブロックまでのハッシュ処理の演算結果として保持した内部状態変数値の値を外部メモリに書き出す。一方、再開情報を付加してメッセージを転送した場合は外部メモリに保持された内部状態変数値を読み出してメッセージの次のブロックからのハッシュ処理を再開するというものである。
(複数のハッシュ関数への対応)
一方、暗号通信プロトコルにおいて使用可能なハッシュ・アルゴリズムは、それぞれ既定されている。デジタル機器間の通信では、各々の通信機器が具備しているハッシュ・アルゴリズムの中から、双方の機器が共通に実行可能なハッシュ・アルゴリズムが選ばれる。相手側の通信機器が実行可能なハッシュ・アルゴリズムはそれぞれ異なる可能性があり、多くの通信機器との間で暗号通信を行うことが必要とされる機器では、多くの相異なるハッシュ・アルゴリズムを実行できる必要がある。
更に近年、ハッシュ・アルゴリズムの標準として広く使われてきたSHA−1、MD5の脆弱性が指摘されるようになり、SHA−2に総称されるより安全性の高いハッシュ・アルゴリズムへの移行が推奨されるようになってきている。そして標準となる暗号通信プロトコルにおいても近い将来、SHA−2などの多ビット長のハッシュ・アルゴリズムの採用が確実視されている。しかしながら、新たな製品は新しいハッシュ・アルゴリズムを備えればよいが、ランニング・チェンジすることが困難な、古いハッシュ・アルゴリズムしかサポートしていないデジタル機器も多く存在する。従って、様々なデジタル機器と安全な通信を行うためには従来から標準的に使われてきた古いハッシュ・アルゴリズムと安全性の高い新しいハッシュ・アルゴリズムの両方に対応する必要がある。特許文献2には、複数のハッシュ関数をハードウエア実装したハッシュ関数処理回路が開示されている。
ハッシュ処理をメッセージ毎に順次行うハッシュ処理回路の場合、あるメッセージに対するハッシュ処理が開始されると、このハッシュ処理が終わるまで別のメッセージに対するハッシュ処理は待たされることになる。現在処理中のメッセージが非常に長く、待ち状態の別のメッセージが非常に短い場合は、全てのメッセージに対する所定の応答時間以内の処理性能を保証できなくなる。こういった問題を解決するためには、メッセージの処理中に別のメッセージの処理も同時に実行できる仕組みをもつことが望ましい。
特開2006−39000号公報 特開2004−53716号公報
(処理対象メッセージの切り替えに関する課題)
しかしながら、特許文献1の構成においては、ハッシュ処理の演算途中結果として保持されるデータは加算処理前の内部状態変数値であり、本来ハッシュ処理を再開するために必要な加算処理後のハッシュ中間値は保持されない。従って、この構成だけでは実際にハッシュ処理の再開はできないという大きな課題がある。ハッシュ処理を中断・再開するためには、このような構成に加えて、1つ前のブロックのハッシュ中間値を別途保持する必要がある。あるいは、1つ前のブロックのハッシュ中間値を生成するために更に1つ前のブロックのハッシュ中間値を別途保持して、外部メモリに保持していた内部状態変数値と加算処理する必要がある。このように、従来の構成の枠組みにおいては、保持しておかなければならないデータ量も増加し、加算処理についての時間的なオーバーヘッドも増加するという課題がある。
また、特許文献1の構成にハッシュ中間値保持あるいは生成手段を追加した構成で、複数のメッセージを途中で切替えてハッシュ処理を行うことも考えられる。しかし、このような構成では、メッセージを構成する複数のブロックのうち、途中のブロックまでのハッシュ処理中間値を外部メモリへ書き出して処理を中断し、処理を再開する際に外部メモリから当該ハッシュ処理中間値を読み出すことになる。このため、ハッシュ処理中間値のメモリへの読み書きのための時間が余分にかかってしまう。
ハッシュ中間値のビット長は例えばSHA−1の場合は160ビット、SHA−256では256ビット、SHA−512では512ビットにもなる。メモリへの読み書きは32ビット単位や64ビット単位でおこなわれることが多く、数サイクルから数十サイクルかけてハッシュ処理の演算途中結果のメモリへの読み書きを行うことになる。またメモリへのデータの読み書きには、バス権確保の待ち時間等、更に余分な時間が必要であることから、上記の先行技術に基づくハッシュ処理の中断・再開にはハッシュ処理自体以外の時間的なオーバーヘッドが大きいという課題がある。
また、上記構成において複数メッセージに対するハッシュ処理を途中で切替えると、1つのメッセージに対するハッシュ処理における途中のブロックまでのハッシュ処理の結果として得られた内部状態変数値をバスに接続した外部メモリへ書き込む必要があった。しかしながらハッシュ処理部の外部へ内部状態変数値を流出させることは外部から盗み見される危険性が増すことを意味しており、安全性上問題である。
なお、中断・再開の際には、ハッシュ処理の演算途中結果のみならず、メッセージ自体の外部メモリへの読み書きのオーバーヘッドも削減することが望ましい。例えば、SHA−1の場合、メッセージの処理単位であるブロックのビット長は512ビットであり、メモリへの読み書きを32ビットあるいは64ビット単位でおこなった場合、16サイクルあるいは8サイクルかかる。新たなメッセージのブロックのデータ、あるいは、一旦破棄したメッセージのブロックに対してハッシュ処理を行う場合などは、外部メモリからメッセージのブロックを読み出す時間がハッシュ処理の大きなオーバーヘッドになってしまう。
また、特許文献1は、ハッシュ処理の中断・再開を指示可能なDMAコントローラのディスクリプタフォーマットを設けることで、中断・再開制御時の条件判定等のためのソフトウエアの介在を削減し、中断・再開を効率的に行うことができるとしている。しかし、特許文献1には、ハッシュ処理部にデータを転送する以前にCPUがメッセージのデータのどの部分を中断・再開するかを予め把握した上で、中断・再開の有無の情報と共に当該データをハッシュ処理部へ転送することが開示されているだけである。つまり、ハッシュ処理部に対して一旦メッセージのデータに対するハッシュ処理要求をおこなった後に、当該メッセージの処理を中断・再開することを実現する技術に関しては開示されていない。
そこで、本発明の第1の目的は、処理性能を落とすことなく複数のメッセージに対するハッシュ処理を途中で切替えることが可能で、安全性の高いハッシュ処理技術を提供することである。
(複数のハッシュ関数への対応に関する課題)
また、ハッシュ処理を高速化するためにハードウエア実装する場合、ハッシュ・アルゴリズムの回路だけでなく、メッセージ拡張処理したデータ、ステップ処理したデータ、加算処理したデータをそれぞれ保持する保持部が必要になる。多くの相異なるハッシュ・アルゴリズム、及び、安全性の高い新しいハッシュ・アルゴリズムを処理するハードウェアをそれぞれ具備すると回路規模が大きくなる。特に安全性の高いハッシュ・アルゴリズムはハッシュ値のビット長が長いために、総じて保持部が大きくなる。しかしながらハードウエアは、一般的に消費電力及びコスト削減のため、できるだけその回路規模を抑える必要がある。
従来のハッシュ装置では、複数の相異なるハッシュ・アルゴリズムを処理する専用回路及び、この複数の専用回路で共通に使用する保持部を具備し、その中の1つのハッシュ・アルゴリズムを選択してハッシュ処理を行う構成がとられている。この場合、複数のハッシュ・アルゴリズムが保持部を共通で使用するため、複数のメッセージに対するハッシュ処理を同時に実行することは不可能であり、その結果として全てのメッセージに対する所定の応答時間以内の処理性能を保証できない。
また、特許文献2に記載の構成のように、複数の相異なるハッシュ・アルゴリズムを処理する専用回路をそれぞれ並べて、要求されたハッシュ・アルゴリズムに対応する専用回路のみを動作させるような構成も知られている。しかし、この場合、回路規模の増大が著しくなるだけでなく、ハッシュ処理回路装置全体の消費電力の変動が大きくなるので、電力解析によって回路の内部情報を外部から解析することが容易になる。このため、耐タンパ性(安全性)の面からも好ましくない。
そこで、本発明の第2の目的は、複数のハッシュ・アルゴリズムを同時に実行可能で、回路規模が小さく安全性の高いハッシュ処理技術を提供することである。
上記目的を達成するため、本発明によれば、メッセージのハッシュ値を計算するハッシュ処理装置であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力手段と、
入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理手段と、
処理対象のメッセージについて前記ハッシュ処理手段が出力したハッシュ中間値を保持する複数の中間値保持手段と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力手段と、
前記ハッシュ処理手段が出力したハッシュ中間値を保持させる中間値保持手段を切り替えて、複数のメッセージに対するハッシュ処理を制御するハッシュ処理制御手段と、
を備えることを特徴とするハッシュ処理装置が提供される。
また、本発明によれば、メッセージのハッシュ値を計算するハッシュ処理装置であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力手段と、
入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力する、ハッシュアルゴリズムごとに設けられた複数のハッシュ処理手段と、
使用するハッシュアルゴリズムに基づいて、動作させる前記ハッシュ処理手段を切り替える切替手段と、
処理対象のメッセージについて動作している前記ハッシュ処理手段が出力したハッシュ中間値を保持する中間値保持手段と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力手段と、
を備えることを特徴とするハッシュ処理装置が提供される。
また、本発明によれば、メッセージのハッシュ値を計算するハッシュ処理装置のハッシュ処理方法であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力工程と、
入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理工程と、
処理対象のメッセージについて前記ハッシュ処理工程において出力したハッシュ中間値を複数の保持手段のいずれかに保持させる保持工程と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力工程と、
前記ハッシュ処理工程において出力したハッシュ中間値を保持させる保持手段を切り替えて、複数のメッセージに対するハッシュ処理を制御するハッシュ処理制御工程と、
を有することを特徴とするハッシュ処理方法が提供される。
また、本発明によれば、メッセージのハッシュ値を計算するハッシュ処理装置のハッシュ処理方法であって、
処理対象のメッセージから得られた拡張済みブロックを入力する入力工程と、
ハッシュアルゴリズムごとに設けられた複数のハッシュ処理手段のいずれかにおいて、入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理工程と、
使用するハッシュアルゴリズムに基づいて、動作させる前記ハッシュ処理手段を切り替える切替工程と、
処理対象のメッセージについて動作している前記ハッシュ処理工程において出力したハッシュ中間値を保持手段に保持させる保持工程と、
処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力工程と、
を有することを特徴とするハッシュ処理方法が提供される。
本発明によれば、処理性能を落とすことなく複数のメッセージに対するハッシュ処理を途中で切替えることが可能で、安全性の高いハッシュ処理技術を提供することができる。また、本発明によれば、複数のハッシュ・アルゴリズムを同時に実行可能で、回路規模が小さく安全性の高いハッシュ処理技術を提供することができる。
以下、添付図面を参照して本発明に係る実施の形態を詳細に説明する。ただし、この実施の形態に記載されている構成要素はあくまでも例示であり、本発明の範囲をそれらのみに限定する趣旨のものではない。また、本実施の形態で説明されている特徴の組み合わせの全てが発明の解決手段に必須のものとは限らない。
<<実施形態1>>
本実施形態では、一例として、ハッシュ値を計算するハッシュ関数としてSHA−1を適用した構成を説明する。SHA−1においては、メッセージを512ビットのブロック単位で処理し、ハッシュ処理の最終結果として、160ビットのハッシュ値を出力する。SHA−1のハッシュ処理は下記の一連の処理から構成される。
・メッセージを512ビット単位のブロックに区切り、最後のブロックも512ビットになるように、メッセージの最後尾に所定のデータを付け加える(以下、パディング処理と呼ぶ)。
・512ビットのブロック毎に、後述するメッセージ拡張処理と80ステップのステップ処理と加算処理をしてハッシュ中間値を生成する。
メッセージ拡張処理は、512ビットのブロックのデータをもとに、32ビットの拡張メッセージ(拡張済みブロック)を80個生成する処理である。元の512ビットのブロックデータは、そのまま0から15番目の拡張メッセージとなる。16番目以降の拡張メッセージに関しては、(n−16)から(n−1)番目の拡張メッセージに対して所定の演算処理をして、n番目の拡張メッセージを生成する。
ステップ処理は、5つの32ビットデータから構成される所定の内部状態変数値の初期値(ハッシュ初期値)に対して80ステップにわたってステップ毎に80個の各拡張メッセージを用いて所定の演算を行い、内部状態変数値を順次更新していく処理である。最初の0番目のステップ(以降、ステップ0と呼ぶ)では、ハッシュ初期値に対して0番目の拡張メッセージを用いて所定の演算処理をして、内部状態変数値を更新する。残りの79の各ステップ(ステップnとする)においては、ステップ(n−1)の内部状態変数値にn番目の拡張メッセージを用いて所定の演算処理をして、内部状態変数値を更新していく。
加算処理は、先頭ブロックから1つ前のブロックまでのハッシュ中間値に、当該ブロックの80ステップ目のステップ処理結果である内部状態変数値を加算する処理である。
メッセージの先頭ブロックからあるブロックまでのハッシュ処理の結果がハッシュ中間値であり、先頭ブロックから最終ブロックまでのハッシュ中間値が当該メッセージ全体に対するハッシュ値となる。
(ハッシュ処理回路の構成)
図1は本発明の実施形態1におけるハッシュ処理回路の構成を示した図である。
100はハッシュ処理回路である。101は後述する外部のDMAコントローラ(以下、DMACと呼ぶ)が外部のメモリからハッシュ処理回路100にDMA転送するメッセージを一時的に保持しておくためのメッセージ保持部である。
102は拡張メッセージを一時的に保持しておくための拡張メッセージ保持部である。103は拡張メッセージ保持部102が一時的に保持した拡張メッセージを入力し、メッセージ拡張処理を行うメッセージ拡張処理部である。
104は入力メッセージの各ブロックに対するステップ0からステップ79のステップ処理を1ステップ単位で順次行うステップ処理部である。105はステップ処理部104で処理する内部状態変数値を選択するセレクタである。
106はステップ処理部104の出力である内部状態変数値を一時的に保持する内部状態変数値保持部である。107は全ステップ分の処理終了後の内部状態変数値と前のブロックまでのハッシュ中間値を加算処理するための加算処理部である。
108は加算処理部107に入力するハッシュ中間値を選択するセレクタである。109、110は加算処理部107の出力であるハッシュ中間値を保持するハッシュ中間値保持部(第1の中間値保持手段、第2の中間値保持手段)である。111はハッシュ中間値保持部109、110に保持されたハッシュ中間値のうち、いずれか一方を選択するセレクタである。
112は前のブロックまでのハッシュ処理の結果であるハッシュ中間値とハッシュ初期値のうち、いずれか一方を選択するセレクタである。113は外部のDMACあるいはCPUとの間のデータ送受信およびハッシュ処理を制御するための各種信号を生成するハッシュ処理制御部である。
114はメッセージの区切り毎に160ビットのハッシュ値に32ビットのダミーデータを付加して、3つの64ビットのデータとしてハッシュ処理回路100の外部へDMA転送によって送信するためのハッシュ値出力部である。116はハッシュ処理回路100の外部のCPU等が設定する、ハッシュ処理回路100の動作パラメタを保持するレジスタである。
117はレジスタ116にデータを入出力するためのアドレス信号、データ信号、制御信号等からなるバス信号である。118はDMACとの間で送受信するDMAデータ/制御信号であり、後述するDMA入力データ、DMA出力データ、DMAリクエスト信号、DMAアクノレッジ信号からなる。
119はセレクタ111によって選択されたハッシュ中間値である。120はDMACがハッシュ処理回路100に出力するDMA入力データであり、メッセージ保持部101が当該DMA入力データを保持する。
121はハッシュ処理回路100がDMACへ出力するDMA出力データであり、ハッシュ値出力部114がハッシュ値あるいはハッシュ中間値を出力する。122はハッシュ回路100がDMACに出力するDMAリクエスト信号であり、ハッシュ処理制御回路113が入力データのリード、出力データのライト要求時に各々DMAリードリクエスト信号、DMAライトリクエスト信号をアサートする。
123はDMACがハッシュ処理回路100に出力するDMAアクノレッジ信号である。これは、DMACは入力データのリード要求に対してはDMAリードアクノレッジ信号のアサートと共に入力データを出力し、出力データのライト要求に対してはDMAライトアクノレッジ信号のアサートと共に出力データを取り込む。なお、上記DMAリクエスト信号122、DMAアクノレッジ信号123は、リード/ライトをまとめて示している。
124はブロックに対するハッシュ処理の開始時に、メッセージ保持部101が格納している拡張メッセージを拡張メッセージ保持部102にロードするためにハッシュ処理制御部113が出力するブロックロード信号である。125はセレクタ105の制御信号としてハッシュ処理制御部113が出力するハッシュ中間値選択信号である。
126はレジスタ116に設定されたハッシュ処理の初期値を示す信号で、ハッシュ処理制御部113がセレクタ112に出力するハッシュ初期値である。127は、セレクタ112の制御信号としてハッシュ処理制御部113が出力するハッシュ初期値選択信号Xである。
128は、セレクタ108の制御信号としてハッシュ処理制御部113が出力するハッシュ初期値選択信号Yである。129は、ハッシュ中間値保持部A109のハッシュ中間値A135のロード信号としてハッシュ処理制御部113が出力するハッシュ中間値Aロード信号である。
130は、ハッシュ中間値保持部B110のハッシュ中間値B136のロード信号としてハッシュ処理制御部113が出力するハッシュ中間値Bロード信号である。131は、セレクタ111の制御信号としてハッシュ処理制御部113が出力するメッセージA選択信号である。
132はメッセージ保持部101が拡張メッセージ保持部102へ出力するメッセージである。133は拡張メッセージ保持部102がメッセージ拡張処理部103へ出力する拡張メッセージである。
134は内部状態変数値保持部106の出力である内部状態変数値である。135はハッシュ中間値保持部A109の出力であるハッシュ中間値Aである。136はハッシュ中間値保持部B110の出力であるハッシュ中間値Bである。
137はメッセージ毎に処理するブロック数をカウントするブロックカウンタであり、メッセージを構成する所定数のブロックに対するハッシュ処理を完了したときにクリアされる。138はメッセージのブロック毎に処理するステップ数をカウントするステップカウンタであり、所定数のステップをカウントしたときにクリアされる。
なお、本実施形態では、ブロックカウンタ137のカウンタ値は、n番目(n=0、・・・)のブロック処理に対して(n+1)の値を示す。ステップカウンタ138のカウンタ値は、n番目(n=0、・・・、79)のステップ処理に対して(n+1)の値を示す。
本実施形態において、ハッシュ処理回路100は、ハッシュ処理のうち、パディング処理以外のメッセージ拡張処理、ステップ処理、加算処理を行う。パディング処理は、後述するハッシュ処理システム200のハッシュ処理回路100以外の部分、具体的には、後述するCPU201とメモリ202が実行する。
(ハッシュ処理システムの構成)
図2はハッシュ処理回路100を動作させるためのシステムの構成例を示した図である。200はハッシュ処理システムである。201はハッシュ処理システム200の動作を制御するCPUである。202はハッシュ処理するメッセージ、ハッシュ値などを保持するためのメモリである。
203はメモリ202からハッシュ処理回路100にメッセージを転送し、ハッシュ処理回路100からメモリ202にハッシュ値を転送するダイレクト・メモリ・アクセス・コントローラ(DMAC)である。204はハッシュ処理システム200の割込み信号を制御する割込み制御部である。205はハッシュ処理回路100、CPU201、メモリ202、DMAC203、割込み制御部204を接続するバスであり、アドレス信号、データ信号、制御信号等からなる。
206はDMAC204から割込み制御部204への割込み信号である。本実施形態においては、DMAC203がハッシュ処理回路100からメモリ202へハッシュ値を転送したあとに、割込み信号206によってDMAC203から割込み制御部204に割込みを通知する。割込み制御部204は不図示の割込み信号により、CPU201にメモリへのハッシュ値格納を通知する。
(ハッシュ処理の概要)
図3は、本実施形態のハッシュ処理システムにおける、メッセージ毎のハッシュ処理の動作フローを示す図である。
ST001において、CPU201よりバス信号117を介してハッシュ処理回路100のレジスタ116に、当該メッセージに対するハッシュ処理の動作パラメタを設定する。
次に、ST002において、ハッシュ処理回路100はDMAリード転送によりメッセージのデータをリードし、ブロック単位毎にハッシュ処理をおこない、最終ブロックまでのハッシュ値を生成する。
次に、ST003において、ハッシュ処理回路100はDMAライト転送により当該メッセージのハッシュ値を出力する。
(レジスタの記憶内容)
図4は、本実施形態のハッシュ処理回路100内のレジスタ116が保持する情報を示す図である。
レジスタ116は、ジョブ開始、メッセージ識別子、ブロック数、ハッシュ初期値、処理継続の各情報の保持領域を有する。『ジョブ開始』領域の情報は、他の『メッセージ識別』、『ブロック数』、『ハッシュ初期値』、『処理継続』領域に設定された情報に基づいて“ハッシュ処理を開始する”こと、あるいは、“ハッシュ処理を開始しない”ことを示す。ハッシュ処理を開始するか否かは、各々当該領域内の所定ビットの1、0によって示すことができる。以下、当該所定ビットを1あるいは0に設定することを、各々フラグを立てる、フラグをクリアすると呼ぶ。
CPU201は1つのメッセージに対するハッシュ処理要求毎に、“ハッシュ処理を開始する”ことを示す為に、ハッシュ処理回路100のレジスタ116の当該『ジョブ開始』領域の所定フラグを立てる。ハッシュ処理回路100は当該領域の所定フラグが立っており、かつ、1つ前のメッセージに対するハッシュ処理が完了している場合にハッシュ処理を開始する。そして、ハッシュ処理回路100は、処理中のメッセージに対するハッシュ処理が完了した時点で、“ハッシュ処理を開始しない”ことを示す為に当該フラグをクリアする。
『メッセージ識別子』領域の情報は、処理要求の中の対象メッセージを当該領域内の所定の複数ビットによって識別する識別子である。例えば、メッセージの種類が2種類の場合は、所定のビットが1なら“メッセージAを処理すること”、0なら“メッセージBを処理すること”を示す。
『ブロック数』領域の情報は、処理要求の中のブロック数を当該領域内の所定ビットによって示すものである。例えば、所定ビットの示す値が処理するブロック数を示す場合は、所定ビットの値が0x0004ならば処理するブロック数は4となる。
『ハッシュ初期値』領域の情報は、処理要求の中の、内部状態変数値の初期値(ハッシュ初期値)を示すものである。SHA−1の場合、内部状態変数値は5つの32ビットのデータから構成されるため、当該領域の所定の160ビットによってハッシュ初期値を示す。尚、CPU201は当該『ハッシュ初期値』領域に、SHA−1のアルゴリズムの内部状態変数値の初期値を書き込んでもよいし、中断したハッシュ処理を再開して処理する為に、ハッシュ中間値に相当する値を書き込んでもよい。
『処理継続』領域の情報は、処理要求の中のハッシュ処理に用いる内部状態変数値の初期値として、以下を各々当該領域内の所定ビットの1、0によって示すものである。
・『ハッシュ初期値』領域に保持する“内部状態変数値の初期値を用いる”こと。
・ハッシュ処理回路100内のハッシュ中間値保持部に保持する“ハッシュ中間値を用いる”こと。
なお、CPU201は1つのメッセージに対するハッシュ処理要求毎に、『メッセージ識別子』、『ブロック数』、『ハッシュ初期値』、『処理継続』領域に所定の値を書き込む。
(メッセージ例)
図5は、本実施形態においてハッシュ処理される2つのメッセージであるメッセージA(第1メッセージ)、メッセージB(第2メッセージ)を示した図である。SHA−1ではハッシュ処理は512ビットのブロック単位でおこなわれる。ここでは、メッセージAは先頭から512ビットのブロックA0、A1、A2、・・・・、A51、A52、A53、A54、・・・・、A93、A94、A95に分割されている。最終ブロックA95については、512ビットに満たない部分はパディング・データが付加されている。同様にしてメッセージBは先頭から512ビットごとにブロックB0、B1、B2、B3に分割され、B3にパディング・データが付加されているとする。これらのメッセージはメモリ202に格納されている。
(メッセージ転送の概要)
図6は、本実施形態においてハッシュ処理されるメッセージA及びメッセージBがメモリ203からハッシュ処理回路100に転送される場合の転送順序を示した図である。本実施形態では、メッセージAの途中でメッセージBを優先的に処理するように、CPU201がハッシュ処理回路100を制御する場合の例を示す。つまり、DMAC203は、メッセージAを構成するブロックA0、A1、A2、・・・、A51、A52をハッシュ処理回路100に順次転送した後、メッセージBを構成するブロックB0、B1、B2、B3をハッシュ処理回路100に順次転送する。その後、DMAC203は、メッセージAを構成するブロックA53、A54、・・・、A93、A94、A95をハッシュ処理回路100に転送する。
本実施形態においては、CPU201はメッセージAのハッシュ処理を途中で中断して、メッセージBのハッシュ処理を行うように処理要求することを予め決定されている。また、ハッシュ処理回路100に対して、メッセージAをブロックA0〜A52から成るメッセージと、ブロックA53〜A95から成るメッセージの2つのメッセージとして処理要求を出す。
(ハッシュ処理)
また、本実施形態では、ハッシュ処理回路100は、図3のフローに従い、ST001でCPU201によってレジスタ116に設定されたブロック数を有するメッセージに対して、ST002で当該ブロック数分のハッシュ処理を中断なく実行する。そして、ST003においてハッシュ処理結果のハッシュ値を出力する。上記メッセージに対するハッシュ処理完了後に、CPU201が次のメッセージに対する処理要求をハッシュ処理回路100のレジスタ116に設定することにより、ハッシュ処理回路100は次のメッセージに対する設定されたブロック数のハッシュ処理を行う。
図7は、3つのメッセージ(A0〜A52、B0〜B3、A53〜95)が図6に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。各々のメッセージに対しては図3のST001からST002の動作フローに従い、順次メッセージ毎にハッシュ処理を行う。
ST101において、CPU201は第一のメッセージ(A0〜A52)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST102において、ハッシュ処理回路100は第一のメッセージ(A0〜A52)のデータをDMAC203にリードリクエストして読込み、当該メッセージに対するハッシュ処理を行う。
ST103において、ハッシュ処理回路100は第一のメッセージ(A0〜A52)に対するハッシュ値をDMAC203にライトリクエストして出力する。
ST104において、CPU201は第ニのメッセージ(B0〜B3)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST105において、ハッシュ処理回路100は第二のメッセージ(B0〜B3)のデータをDMAC203にリードリクエストして読込み、当該メッセージに対するハッシュ処理を行う。
ST106において、ハッシュ処理回路100は第二のメッセージ(B0〜B3)に対するハッシュ値をDMAC203にライトリクエストして出力する。
ST107において、CPU201は第三のメッセージ(A53〜A95)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST108において、ハッシュ処理回路100は第三のメッセージ(A53〜A95)のデータをDMAC203にリードリクエストして読込み、当該メッセージに対するハッシュ処理を行う。
ST109において、ハッシュ処理回路100は第三のメッセージ(A53〜A95)に対するハッシュ値をDMAC203にライトリクエストして出力する。
(ハッシュ処理の詳細)
図8〜図10は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。ここで、TXXXはステップ処理およびDMA転送処理の基本単位となっている動作クロック周期Tに基づく期間を表している。本実施形態では、ハッシュ処理回路100は周期Tの動作クロックで同期設計されている。また、例えば、メッセージAの各512ビットのブロックのデータは32ビットの0番目から15番目の16個の拡張メッセージW0〜W15に相当する。例えば、メッセージAの0番目のブロックをA0、A0の0番目と1番目の32ビットデータをA0_W00―W01、A0の最初の16個の拡張メッセージをEA0_W00−W15と表記する。同様に、例えば、ブロックA0の0番目のステップの内部状態変数値をSA0_00、ブロックA0のハッシュ中間値をHA0と表記する。以下、単位期間毎の各部の動作を説明する。
T000において、データライトをするために、ハッシュ処理制御部113がDMAC203に対してDMAライトリクエスト信号122をアサートする。T001において、DMAC203は、DMAライトアクノレッジ信号123を返すと共に、ハッシュ値出力部114がDMA出力データ116として出力するハッシュ値(ここではHAX)の最初の64ビットをメモリ202に転送する。以下、T002からT005にかけて、DMAC203はハッシュ値HAXをメモリ202に転送する。この間、ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ここでは、T005までにDMAライトアクノレッジ信号123が3回アサートされたことを確認し、T006においてDMAライトリクエスト信号122をデアサートする。
T006およびT007において、CPU201がバス205、バス信号117を経由して、レジスタ116を設定する。ここでは、図4に示したレジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てると共に、『処理継続』領域に“内部状態変数値の初期値を用いる”フラグを立てる。また、『メッセージ識別子』領域に“メッセージAを処理する”こと、『ブロック数』領域に“53ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”を設定する。
レジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、T008において、データリードをするために、ハッシュ処理制御部113がDMAC203に対してDMAリードリクエスト信号122をアサートする。T009において、DMAC203は、DMAリードアクノレッジ信号123を返す。それと同時にメモリ202に保持されたメッセージAの先頭ブロックA0の、最初の64ビット(A0_W00−W01)をハッシュ処理装置100に転送する。
T010において、メッセージ保持部101は64ビットデータA0_W00−W01を保持する。以下、T011からT023にかけて、DMAC203はブロックA0をメモリ202からハッシュ処理回路100に転送する。この間、ハッシュ処理制御部113は、DMAC203がDMAアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113はT023までにDMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認し、T024においてDMAリードリクエスト信号122をデアサートする。レジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立った状態で、ブロックカウンタ137はDMAリードリクエスト信号122のデアサート回数により、処理するブロック数のカウントを行う。ブロックカウンタ137のカウント値をBCとすると、ここでBCは1となる。そして同じくT024において、メッセージ保持部101がブロックA0を保持する。
T025において、ハッシュ処理制御部113がブロックロード信号124をアサートする。
T026において、拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、メッセージ保持部101に保持されたブロックA0を読み込む。このとき、拡張メッセージ保持部102は、ブロックA0を16個の32ビットデータEA0_W00〜EA0_W15に分割して保持する。ブロックロード信号124アサート後に、ステップカウンタ138は基本処理期間T毎の不図示のクロックにより、ステップ数をカウントする。ステップカウンタ138のカウント値をSCとすると、ここでSCは1となる。以降、ステップカウンタ138はカウンタ値SCが80になるまで、1ステップ処理の単位の基本処理期間Tのクロック毎にカウントアップする。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータが拡張メッセージ保持部102にロードされたことに応じて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT026においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA0_W00〜EA0_W15)を入力して、32ビットデータEA0_W16を求める。
同じくT026においてハッシュ処理制御部113は、レジスタ116の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っており、かつ、ステップカウンタ138が1であることに応じて、ハッシュ初期値選択信号X127をアサートする。また、T026においてハッシュ処理制御部113は、ステップカウンタ138が1であることに応じて、ハッシュ中間値選択信号125をアサートする。
同じくT026においてセレクタ112は、ハッシュ初期値選択信号X127がアサートされているので、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ初期値126を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ初期値126を出力する。
同じくT026においてステップ処理部104は、拡張メッセージ保持部102が保持するEA0_W00とハッシュ初期値126を入力し、SHA−1のステップ0の処理をして内部状態変数値SA0_00を求める。
T027において、ステップカウンタ138はカウントアップし、カウンタ値SCは2となる。
同じくT027において拡張メッセージ保持部102は、EA0_W01〜EA0_W15およびT026においてメッセージ拡張処理部103で求めたEA0_W16を保持する。
同じくT027において内部状態変数値保持部106は、T026において求めた内部状態変数値SA0_00を保持する。
同じくT027においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA0_W01〜EA0_W16)を入力して、32ビットデータEA0_W17を求める。
同じくT027においてハッシュ処理制御部113は、ステップカウンタ138が1ではないことに応じて、ハッシュ初期値選択信号X127とハッシュ中間値選択信号125をデアサートする。
同じくT027においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA0_00を出力する。
同じくT027においてステップ処理部104は、拡張メッセージEA0_W01と内部状態変数値SA0_00を入力し、SHA−1のステップ1の処理をして内部状態変数値SA0_01を求める。
同じくT027においてDMAC203は、DMAリードアクノレッジ信号123を返すと同時に、メモリ202から64ビットデータA1_W00−W01をハッシュ処理装置100に転送する。
T028において、ステップカウンタ138はカウントアップし、カウンタ値SCは3となる。
同じくT028において拡張メッセージ保持部102は、EA0_W02〜EA0_W16およびT027においてメッセージ拡張処理部103で求めたEA0_W17を保持する。
同じくT028において内部状態変数値保持部106は、T027において求めた内部状態変数値SA0_01を保持する。
同じくT028においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA0_W02〜EA0_W17)を入力して、32ビットデータEA0_W18を求める。
同じくT028においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA0_01を出力する。
同じくT028においてステップ処理部104は、拡張メッセージ保持部102が保持するEA0_W02と内部状態変数値SA0_01を入力し、SHA−1のステップ2の処理をして内部状態変数値SA0_02を求める。
同じくT028においてメッセージ保持部101は、64ビットデータA1_W00−W01を保持する。
以下、T029〜T041まで、DMAC203はメモリ202からハッシュ処理装置100へブロックA1のDMA転送を行う。この間、ハッシュ処理制御部113は、DMAC203がDMAリードアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113はT041までにDMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認し、T042においてDMAリードリクエスト信号122をデアサートする。そしてT042において、メッセージ保持部101はブロックA1を保持する。また、DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタ137はカウントアップし、カウンタ値BCは2になる。
また、T029〜T105まで、ハッシュ処理回路100は、SHA−1のステップ2〜79の処理を行う。この間、ステップカウンタ138はカウント値SCを3から80までカウントアップする。その結果、T106において内部状態変数値保持部106は、SHA−1のステップ79の処理結果である内部状態変数値SA0_79を保持する。
T105までに所定の80ステップまでカウントした為、T106においてステップカウンタ138はカウンタ値SCをクリアし、SCは0となる。
同じくT106においてハッシュ処理制御部113は、
・レジスタ116の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っていること。並びに、
・T105のステップカウンタ138のカウント値SCが80であること。
に応じて、ハッシュ初期値選択信号Y128をアサートする。
同じくT106においてセレクタ108は、ハッシュ初期値選択信号Y128のアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119のうち、ハッシュ初期値126を出力する。
同じくT106において加算処理部107は、内部状態変数値134(SA0_79)とハッシュ初期値126を入力して、ハッシュ中間値HA0を求める。
同じくT106においてハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、ハッシュ中間値Aロード信号129をアサートする。またハッシュ処理制御部113は、ブロックロード信号124をアサートする。
ハッシュ中間値保持部A109はハッシュ中間値Aロード信号129のアサートを検知し、T107においてハッシュ中間値HA0を保持する。同じくT107において、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、メッセージA選択信号131をアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA0)をハッシュ値出力部114へ出力する。
拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、同じくT107において、メッセージ保持部101が保持するブロックA1を読み込む。このとき、拡張メッセージ保持部102は、ブロックA1を16個の32ビットデータEA1_W00〜EA1_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことに応じて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT107において、ハッシュ処理制御部113は、ブロックA0のハッシュ処理が終わったことに応じて、ハッシュ初期値選択信号Y128をデアサートする。
同じくT107において、ブロックロード信号124のアサートを受けて、ステップカウンタ138はカウントアップを開始し、カウンタ値SCは1となる。
同じくT107においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA1_W00〜EA1_W15)を入力して、32ビットデータEA1_W16を求める。
ブロックA1の処理であるため、T107においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートしない。
同じくT107においてセレクタ112は、ハッシュ初期値信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ中間値119(HA0)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HA0)を出力する。
同じくステップ107においてステップ処理部104は、拡張メッセージ保持部102が保持するEA1_W00とハッシュ中間値119(HA0)を入力し、SHA−1のステップ0の処理をして内部状態変数値SA1_00を求める。
以下、T027〜T041におけるブロックA1のDMA転送と同様に、T108〜T122において、ブロックA2のDMA転送を行う。T123においてハッシュ処理制御部113は、ブロックA1に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタ137をカウントアップし、カウンタ値BCは3となる。また、T027〜T105におけるブロックA0に対するSHA−1のステップ1〜79の処理と同様に、T108〜T186において、ブロックA1に対するSHA−1のステップ1〜79の処理を行う。この間ステップカウンタ138はカウンタ値SCを2から80までカウントアップする。その結果、T187において内部状態変数値保持部106は、SHA−1のステップ79の処理結果である内部状態変数値SA1_79を保持する。
同じくT187において、ブロックA1の処理であるため、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT187においてセレクタ108は、ハッシュ初期値選択信号Y126のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HA0)のうち、ハッシュ中間値119(HA0)を出力する。
同じくT187において加算処理部107は、内部状態変数値134(SA1_79)とハッシュ中間値119(HA0)を入力して、ハッシュ中間値HA1を求める。
同じくT187においてハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、ハッシュ中間値Aロード信号129をアサートする。ハッシュ中間値保持部A109は、T188においてハッシュ中間値Aロード信号129のアサートを検知し、ハッシュ中間値HA1を保持する。ここで、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、メッセージA選択信号131をアサートする。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA1)をハッシュ出力部114へ出力する。
以降、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”こと、『ブロック数』領域が“53ブロック分処理する”ことを示しているのを受けて、ブロックA3〜A52をDMA転送する。また、ブロックA2〜A52に対してハッシュ処理を行う。
(ブロック単位の動作)
図11Aと図11B(以下、まとめて図11)は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。なお、TBXXXは基本的にブロック処理の単位となっている期間Tの81個分の期間をあらわす。先述のT026〜T106はTB0にあたり、T107〜T187はTB1にあたる。但し、メッセージ毎のハッシュ処理完了後のDMAライト転送及び次のメッセージの最初のブロックのDMAリード転送をする期間に相当するTB53、TB58は期間Tの26個分の期間となる。また、入力メッセージA0_W00〜W15はA0(t)、拡張メッセージEA0_W00〜EA_W79はEA0(t)、内部状態変数値SA0_00〜SA0_79はSA0(t)とあらわしている。ここで、tはステップ数を示し、XX(t)はステップ数tにより値が変化することを示す。
以下、ブロック処理期間毎の各部の動作を説明する。尚、一部ステップ処理期間毎の詳細動作も説明する。
前述したように、TB0においてDMAC203が、メモリ202からハッシュ処理回路100にブロックA1をDMA転送する。ブロックA1のDMA転送終了後、ブロックカウンタ137はカウントアップし、カウンタ値BCは2となる。TB1においてDMAC203が、メモリ202からハッシュ処理回路100にブロックA2をDMA転送する。ブロックA2のDMA転送終了後、ブロックカウンタ137はカウントアップし、カウンタ値BCは3となる。
また、前述したように、ハッシュ処理回路100は、TB0においてメッセージAの先頭ブロックであるブロックA0を入力して拡張メッセージEA0(t)を求めると共に内部状態変数値SA0(t)を求める。SA(t)を更新するステップ処理においてはステップt毎にt番目の拡張メッセージと(t−1)番目の内部状態変数値を用いて内部状態変数値を更新し、ステップ79で内部状態変数値SA0_79を求める。そして最終的にハッシュ初期値と加算してハッシュ中間値HA0を求める。TB1において、ハッシュ中間値保持部A109はハッシュ中間値HA0を保持し、ハッシュ処理回路100はブロックA1を入力して拡張メッセージEA1(t)と内部状態変数値SA1(t)を求め、ステップ79で内部状態変数値SA1_79を求める。そして最終的に内部状態変数値SA1_79とハッシュ中間値HA0を加算して、ハッシュ中間値HA1を求める。
以下、TB2〜TB51においてDMAC203は、ブロックA3〜A52をメモリ202からハッシュ処理回路100にDMA転送する。このとき、ブロックカウンタ137の値は4〜53までカウントアップする。また、TB2〜TB52においてハッシュ処理回路100は、ブロックA2〜A52のハッシュ処理をする。その結果、TB53においてハッシュ中間値保持部A109はハッシュ中間値HA52を保持し、ハッシュ値出力部114は、ハッシュ中間値HA52を出力する。
ここで、レジスタ116の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージAを処理する”および“53ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB53においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“内部状態変数値の初期値を用いる”フラグをクリアする。また、ハッシュ処理制御部113は、TB53においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値出力部114が出力するハッシュ中間値HA52を、メモリ202へ転送する。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB53においてDMAC203は、ハッシュ処理装置100からのDMAライトリクエスト信号122がデアサートしたのを検知して、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号により、CPU201にメモリ202へのハッシュ中間値HA52の格納を通知する。
同じくTB53において、CPU201はDMAC203からの割込みによって“メッセージA”を“53ブロック分”、“メッセージの先頭から”処理し終わったことを検知する。そこでCPU201は、バス205、バス信号117を経由して、レジスタ116を設定する。ここでは、図4に示したレジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てると共に、『処理継続』領域に“内部状態変数値の初期値を用いる”フラグを立てる。また、『メッセージ識別子』領域に“メッセージBを処理する”こと、『ブロック数』領域に“4ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”を設定する。
レジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、同じくTB53において、データリードをするために、ハッシュ処理制御部113がDMAC203に対してDMAリードリクエスト信号112をアサートする。DMAC203は、DMAリードアクノレッジ信号123を返すと共にメッセージBの先頭ブロックB0をハッシュ処理装置100にDMA転送し、メッセージ保持部101がブロックB0を保持する。そしてブロックカウンタ137はカウントアップし、カウンタ値BCは1となる。
TB54において、ブロックB1のDMA転送およびブロックB0に対するハッシュ処理がおこなわれる。以下に詳細を示す。
T4344においてハッシュ処理制御部113は、ブロックロード信号124をアサートする。T4345において、拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、メッセージ保持部101が保持するブロックB0を読み込む。このとき、拡張メッセージ保持部102は、ブロックB0を16個の32ビットデータEB0_W00〜EB0_W15に分割して保持する。また、ステップカウンタ138はカウントアップを開始し、カウンタ値SCは1になる。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことに応じて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4345においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EB0_W00〜EB0_W15)を入力して、32ビットデータEB0_W16を求める。
同じくT4345においてハッシュ処理制御部113は、
・レジスタ116の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っていること。並びに、
・ステップカウンタ138のカウンタ値SCが1であること。
に応じて、ハッシュ初期値選択信号X127とハッシュ中間値選択信号125をアサートする。
同じくT4345においてセレクタ112は、ハッシュ初期値選択信号X127のアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ初期値126を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ初期値126を出力する。
同じくT4345においてステップ処理部104は、拡張メッセージ保持部102が保持するEB0_W00とハッシュ初期値126を入力し、SHA−1のステップ0の処理をして内部状態変数値SB0_00を求める。
T4346において、ステップカウンタ138はカウントアップし、カウンタ値SCは2となる。
同じくT4346において拡張メッセージ保持部102は、EB0_W01〜EB0_W15およびメッセージ拡張処理部103で求めたEB0_W16を保持する。
同じくT4346において内部状態変数値保持部106は、内部状態変数値SB0_00を保持する。
同じくT4346においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EB0_W01〜EB0_W16)を入力して、32ビットデータEB0_W17を求める。
同じくT4346においてハッシュ処理制御部113は、ステップカウンタ138のカウント値SCが1ではないことに応じて、ハッシュ初期値選択信号X127とハッシュ中間値選択信号125をデアサートする。
同じくT4346においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SB0_00を出力する。
同じくT4346においてステップ処理部104は、拡張メッセージEB0_W01と内部状態変数値SB0_00を入力し、SHA−1のステップ1の処理をして内部状態変数値SB0_01を求める。そしてハッシュ処理制御部113は、ステップカウンタ138をカウントアップする。このときのステップカウンタ138の値は2である。
同じくT4346においてDMAC203は、DMAリードアクノレッジ信号123を返すと同時に、メモリ202から64ビットデータB1_W00−W01をハッシュ処理装置100に転送する。
T4347において、ステップカウンタ138をカウントアップし、カウンタ値SCは3となる。
同じくT4347において拡張メッセージ保持部102は、EB0_W02〜EB0_W16およびメッセージ拡張処理部103で求めたEB0_W17を保持する。
同じくT4347において内部状態変数値保持部106は、内部状態変数値SB0_01を保持する。
同じくT4347においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EB0_W02〜EB0_W17)を入力して、32ビットデータEB0_W18を求める。
同じくT4347においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SB0_01を出力する。
同じくT4347においてステップ処理部104は、拡張メッセージEB0_W02と内部状態変数値SB0_01を入力し、SHA−1のステップ2の処理をして内部状態変数値SB0_02を求める。
同じくT4347においてメッセージ保持部101は、DMAC203がDMA転送した64ビットデータB1_W00−W01を保持する。
以下、T4348からT4360までDMAC203はメモリ202からハッシュ処理装置100へのブロックB1のDMA転送を引き続き行う。この間、ハッシュ処理制御部113は、DMAC203がDMAリードアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認した後、DMAリードリクエスト信号122をデアサートする。そして、メッセージ保持部101はブロックB1を保持する。またブロックカウンタ137はカウントアップし、カウンタ値BCは2になる。
また、T4348からT4424までハッシュ処理回路100は、SHA−1のステップ3〜79の処理を行う。この間、各ステップ処理の開始時にステップカウンタ138は4から80までカウントアップする。その結果、T4425において内部状態変数値保持部106は、SHA−1のステップ79の処理結果である内部状態変数値SB0_79を保持する。
同じくT4425においてハッシュ処理制御部113は、
・レジスタ116の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っていること。並びに、
・T4424のステップカウンタ138の値が80であること。
に応じて、ハッシュ初期値選択信号Y128をアサートする。
同じくT4425においてセレクタ108は、ハッシュ初期値選択信号Y128のアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119のうち、ハッシュ初期値126を出力する。
同じくT4425において加算処理部107は、内部状態変数値134(SB0_79)とハッシュ初期値126を入力して、ハッシュ中間値HB0を求める。
同じくT4425において、ハッシュ処理制御部113はレジスタ116の『メッセージ識別子』領域が“メッセージBを処理する”旨を示しているので、ハッシュ中間値Bロード信号130をアサートする。またハッシュ処理制御部113は、ブロックロード信号124をアサートする。そこで、TB55期間内のT4426において、ハッシュ中間値保持部B110はハッシュ中間値HB0を保持する。また、レジスタ116の『メッセージ識別子』領域が“メッセージBを処理する”旨を示しているので、ハッシュ処理制御部113はメッセージA選択信号131をアサートしない。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB0)をハッシュ値出力部114へ出力する。
同じくT4426において拡張メッセージ保持部102は、ブロックロード信号124のアサートを検知し、メッセージ保持部101が保持するブロックB1を読み込む。このとき、拡張メッセージ保持部102は、ブロックB1を16個の32ビットデータEB1_W00〜EB1_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことに応じて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4426においてハッシュ処理制御部113は、ブロックB0のハッシュ処理が終わったことに応じて、ハッシュ初期値選択信号Y128をデアサートする。
以上により、TB55において、ハッシュ中間値保持部A109はハッシュ中間値HA52を保持し、ハッシュ中間値保持部B110はハッシュ中間値HB0を保持する。
ブロックB1に対するハッシュ処理は、TB55においてハッシュ中間値保持部B100が保持するハッシュ中間値HB0を用いて行う。
以降、DMAC203は、TB55〜TB56においてブロックB2〜B3をメモリ202からハッシュ処理回路100にDMA転送する。このとき、ブロックカウンタ137はカウンタ値BCを3〜4までカウントアップする。また、ハッシュ処理回路100は、TB55〜TB57おいてブロックB1〜B3に対するハッシュ処理を行う。この間、レジスタ116の『メッセージ識別子』領域が“メッセージBを処理する”旨を示しているので、ハッシュ処理制御部113はハッシュ中間値Aロード信号129をアサートせず、ハッシュ中間値Bロード信号130を適宜アサートする。そのため、ハッシュ中間値保持部A109はメッセージBのハッシュ中間値を保持せず、ハッシュ中間値保持部B110がメッセージBのハッシュ中間値を保持する。また、レジスタ116の『メッセージ識別子』領域が“メッセージBを処理する”旨を示しているので、ハッシュ処理制御部113はメッセージA選択信号131をアサートしない。そのため、セレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力を出力する。その他の処理はブロックA1〜A3に対する処理と同様である。
この結果、TB55〜TB57においてハッシュ中間値HB1〜HB3が求まる。TB58において、ハッシュ中間値保持部A109はメッセージAのブロックA0〜A52に対するハッシュ中間値HA52を保持し、ハッシュ中間値保持部B110はメッセージBのブロックB0〜B3に対するハッシュ中間値HB3を保持する。メッセージBは図5に示すようにブロックB0〜B3で構成されるので、ハッシュ中間値HB3はメッセージBのハッシュ値HBとなる。TB58においてハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージBを処理する”旨を示しているので、メッセージA選択信号131をアサートしない。そのためセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA52)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部B110の出力(HB)をハッシュ値出力部114へ出力する。
ここで、レジスタ116の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージBを処理する”および“4ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB58においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“内部状態変数値の初期値を用いる”フラグをクリアする。また、ハッシュ処理制御部113は、TB58においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HBをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMA203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB58においてDMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HBの格納を通知する。
同じくTB58において、CPU201はDMAC203からの割込みによって“メッセージB”を“4ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。そこでCPU201は、バス205、バス信号117を経由して、レジスタ116を設定する。ここでは、図4に示したレジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグをたてると共に、『処理継続』領域に“ハッシュ中間値を用いる”フラグを立てる。また、『メッセージ識別子』領域に“メッセージAを処理する”こと、『ブロック数』領域に“43ブロック分処理する”ことを設定する。このときハッシュ処理制御部113は、ブロックカウンタ137をクリアする。
レジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、同じくTB58において、データリードをするために、ハッシュ処理制御部113がDMAC203に対してDMAリードリクエスト信号122をアサートする。DMAC203は、DMAリードアクノレッジ信号123を返すと共にメッセージAのブロックA53をハッシュ処理装置100にDMA転送し、メッセージ保持部101がブロックA53を保持する。そしてブロックカウンタ137はカウントアップし、カウンタ値BCは1となる。
TB59において、ブロックA54のDMA転送およびブロックA53に対するハッシュ処理がおこなわれる。以下に詳細を示す。
T4694において、ハッシュ処理制御部113がブロックロード信号124をアサートする。T4695において、拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、メッセージ保持部101が保持するブロックA53を読み込む。このとき、拡張メッセージ保持部102は、ブロックA53を16個の32ビットデータEA53_W00〜EA53_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことに応じて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4695において、ステップカウンタ138はカウントアップし、カウンタ値SCは1となる。
同じくT4695において、メッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA53_W00〜EA53_W15)を入力して、32ビットデータEA53_W16を求める。
ハッシュ処理制御部113は、レジスタ116の『処理継続』領域に“ハッシュ中間値を用いる”フラグが立っていることを受けて、ハッシュ初期値選択信号X127をデアサートする。
同じくT4695において、ハッシュ処理制御部113はレジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”ことを示しているのを受けて、メッセージA選択信号131をアサートしている。よってセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA52)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部A109の出力(HA52)を出力する。セレクタ112は、ハッシュ初期値選択信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119(HA52)とハッシュ初期値126のうち、ハッシュ中間値119(HA52)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HA52)を出力する。
同じくT4695において、ステップ処理部104は、拡張メッセージ保持部102が保持するEA53_W00とハッシュ中間値HA52を入力し、SHA−1のステップ0の処理をして内部状態変数値SA53_00を求める。
T4696において、ステップカウンタ138はカウントアップし、カウンタ値SCは2となる。
同じくT4696において拡張メッセージ保持部102は、EA53_W01〜EA53_W15およびメッセージ拡張処理部103で求めたEA53_W16を保持する。
同じくT4696において内部状態変数値保持部106は、内部状態変数値SA53_00を保持する。
同じくT4696においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA53_W01〜EA53_W16)を入力して、32ビットデータEA53_W17を求める。
同じくT4696においてハッシュ処理制御部113は、SHA−1のステップ1の処理であることを受けて、ハッシュ初期値選択信号X127をデアサートする。
同じくT4696においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA53_00を出力する。
同じくT4696においてステップ処理部104は、拡張メッセージEA53_W01と内部状態変数値SA53_00を入力し、SHA−1のステップ1の処理をして内部状態変数値SA53_01を求める。
同じくT4696において、DMAC203は、DMAリードアクノレッジ信号123を返すと同時に、メモリ202から64ビットデータA54_W00−W01をハッシュ処理装置100に転送する。 T4697において、ステップカウンタ138はカウントアップし、カウンタ値SCは3となる。
同じくT4697において拡張メッセージ保持部102は、EA53_W02〜EA53_W16およびメッセージ拡張処理部103で求めたEA53_W17を保持する。
同じくT4697において内部状態変数値保持部106は、内部状態変数値SA53_01を保持する。
同じくT4697においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA53_W02〜EA53_W17)を入力して、32ビットデータEA53_W18を求める。
同じくT4697においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA53_01を出力する。
同じくT4697においてステップ処理部104は、拡張メッセージEA53_W02と内部状態変数値SA53_01を入力し、SHA−1のステップ2の処理をして内部状態変数値SA53_02を求める。
同じくT4697においてメッセージ保持部101は64ビットデータA54_W00−W01を保持する。
以下、T4698からT4710まで、DMAC203はメモリ202からハッシュ処理装置100へのブロックA54のDMA転送を引き続き行う。この間、ハッシュ処理制御部113は、DMAC203がDMAリードアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、T4711において、DMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認した後、DMAリードリクエスト信号122をデアサートする。そして、メッセージ保持部101はブロックA54を保持する。また、ブロックカウンタ137はカウントアップし、カウンタ値BCは2になる。
また、T4697からT4774まで、ハッシュ処理回路100は、SHA−1のステップ2〜79の処理を行う。この間、ステップカウンタ138は、各ステップ処理の開始時にカウンタ値SCを3から80までカウントアップする。その結果、T4775において内部状態変数値保持部106は、SHA−1のステップ79の処理結果である内部状態変数値SA53_79を保持する。
同じくT4775においてハッシュ処理制御部113は、レジスタ116の『処理継続』領域に“ハッシュ中間値を用いる”フラグが立っていることを受けて、ハッシュ初期値選択信号Y128をデアサートする。
同じくT4775においてセレクタ108は、ハッシュ初期値選択信号Y128のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119のうち、ハッシュ中間値119を出力する。
同じくT4775において加算処理部107は、内部状態変数値134(SA53_79)とハッシュ中間値119(HA52)を入力して、ハッシュ中間値HA53を求める。
同じくT4775において、ハッシュ処理制御部113がブロックロード信号124をアサートする。
T4775において、ハッシュ処理制御部113はレジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、ハッシュ中間値Aロード信号129をアサートする。そのため、TB60期間内のT4776において、ハッシュ中間値保持部A109はハッシュ中間値HA53を保持する。また、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、ハッシュ処理制御部113はメッセージA選択信号131をアサートする。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA53)をハッシュ値出力部114へ出力する。
同じくT4776において、拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、メッセージ保持部101が保持するブロックA54を読み込む。このとき、拡張メッセージ保持部102は、ブロックA54を16個の32ビットデータEA54_W00〜EA54_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4776においてハッシュ処理制御部113は、ブロックA53のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Y128をデアサートする。
以上により、TB60において、ハッシュ中間値保持部A109はハッシュ中間値HA53を保持し、ハッシュ中間値保持部B110はハッシュ値HBを保持する。
以降、DMAC203は、TB60〜TB100においてブロックA55〜A95をメモリ202からハッシュ処理回路100にDMA転送する。このとき、ブロックカウンタ137はカウンタ値BCを3〜43までカウントアップする。また、ハッシュ処理回路100は、TB60〜TB101においてブロックA54〜A95に対するハッシュ処理を行う。この間、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているのでハッシュ値Bロード信号130をアサートせず、ハッシュ値Aロード信号129を適宜アサートする。そのため、ハッシュ中間値保持部B110はメッセージAのハッシュ中間値を保持せず、ハッシュ中間値保持部A109がメッセージAのハッシュ中間値を保持する。また、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているのでメッセージ選択信号A131をアサートしている。そのため、セレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力を出力する。その他の処理は他のブロックに対する処理と同様である。
この結果、TB102においてハッシュ中間値保持部A109は、メッセージAのブロックA0〜ブロックA95に対するハッシュ中間値HA95を保持する。メッセージAは図5に示すようにブロックA0〜A95で構成されるので、ハッシュ中間値HA95はメッセージAのハッシュ値HAとなる。TB102においてハッシュ処理制御部113はメッセージA選択信号131をアサートしている。そのためセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部A109の出力(HA)をハッシュ値出力部114へ出力する。
ここで、レジスタ116の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージAを処理する”および“43ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB102においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“ハッシュ中間値を用いる”フラグをクリアする。また、ハッシュ処理制御部113は、TB102においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HAをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB102においてDMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HAの格納を通知する。
以上のように、本実施形態では、メッセージAの途中でメッセージBを先に処理するように、CPUは、第一のメッセージ、第二のメッセージ、第三のメッセージに対するハッシュ処理をハッシュ処理回路に対して順次要求する。ここで、第一のメッセージはA0〜A52、第二のメッセージはB0〜B3、第三のメッセージはA53〜A95である。そして、第一のメッセージに対するハッシュ処理の結果のハッシュ中間値をハッシュ処理回路内に保持し、第二のメッセージのハッシュ処理完了後に、保持した第一のメッセージのハッシュ中間値を用いて、第三のメッセージに対するハッシュ処理を行う。これにより、ハッシュ中間値を外部のメモリに一旦書き出して、再び読込んでいた従来の構成と比べて、外部メモリとのハッシュ中間値の送受信に要していたオーバーヘッド分の時間が削減され、高速に応答する効率的なハッシュ処理を実現できる。
また、本実施形態においては、メッセージの1ブロック分をハッシュ処理回路内に保持することにより、外部メモリからメッセージの各ブロックデータを転送するのに必要なオーバーヘッド時間が不要である。このため、より効率的なハッシュ処理を実現することができる。
なお、本実施形態においては、1つ前のブロックに対するハッシュ処理を完了した時点で、上記回路内に保持した1ブロック分のデータを拡張処理部にロードし、その後に、外部メモリから次の1ブロック分のデータ転送を要求している。しかし、これに限られず、例えば、当該ロードしたブロック分に対するハッシュ処理が完了するまで保持部で保持して、その後、次の1ブロック分のデータの転送要求をしてもよい。当該ブロックに対するハッシュ処理を途中で破棄した場合も、当該ブロックのデータが回路内に保持されているので、外部メモリから再度読込むオーバーヘッドを削減する効果があるためである。
また、本実施形態においては、ハッシュ関数としてSHA−1を用いた場合を一例として説明したが、ハッシュ関数はMD5、SHA−256等、他のアルゴリズムでもよいことは言うまでもない。
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成しても構わない。
また、本実施形態においては、2種類のメッセージに対するハッシュ中間値を保持可能な構成としたが、3以上のハッシュ中間値保持部を設けることにより、3種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。
また、本実施形態においては、1つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたが、これに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を1つあるいは複数備える構成としてもよい。
また、本実施形態においては、メッセージAのハッシュ中間値はハッシュ中間値保持部Aに、メッセージBのハッシュ中間値はハッシュ中間値保持部Bに保持するというように各メッセージのハッシュ中間値とハッシュ中間値保持部の対応は固定的だった。しかし、例えば、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持する対応情報保持部を設け、当該対応情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定するようにしてもよい。
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、CPUが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてDMACを用いたが、他の転送手段を用いてもよい。
また、本実施形態においては、DMA入出力データのビット幅が64ビットである場合の例を説明したが、他のビット数でもよいことは言うまでもない。
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、DMA転送処理の基本処理期間Tは同一としたが、ステップ処理とDMA転送処理の基本処理期間は異なっていても構わない。
また、本実施形態では、CPUがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はDMAアクノレッジ信号をカウントすることにより、CPUが設定したブロック数のメッセージの供給を認識する例を説明した。しかし、メッセージの転送完了をCPUからレジスタ設定で通知する等、他の方法を用いてもよい。
なお、本発明の実施の形態は、上記構成に限定されるものでなく、種々に変更可能である。
<<実施形態2>>
実施形態1においては、処理継続、メッセージ識別子等の情報は、メッセージ毎にCPU201からハッシュ処理回路100のレジスタに設定されていた。本実施形態2においては、メッセージのデータに同期したサイドバンド信号である入力データアトリビュート信号内に上記処理継続、メッセージ識別子等の情報が含まれている場合を説明する。
(ハッシュ処理回路の構成)
図12は本実施形態2におけるハッシュ処理回路の構成を示した図である。以下、図12にもとづいて、実施形態1と異なる部分のみ説明する。
137はハッシュ処理回路100が受け取った第一のメッセージ(以下、メッセージAと呼ぶ)のブロック数をカウントするブロックカウンタである。140はハッシュ処理回路100が受け取った第ニのメッセージ(以下、メッセージBと呼ぶ)のブロック数をカウントするブロックカウンタXである。ハッシュ処理制御部113はメッセージを構成する所定数のブロックに対するハッシュ処理を完了したときに、ブロックカウンタ137あるいはブロックカウンタX140のカウンタ値をクリアする。139はDMAC203がDMA入力データ120と同期してハッシュ回路100に出力する入力データアトリビュート信号である。入力データアトリビュート信号の内容には、メッセージ識別子、処理継続が含まれる。
(レジスタの記憶内容)
図13は、本実施形態のハッシュ処理回路100内のレジスタ116が保持する情報を示す図である。以下、実施形態1と異なる部分のみ説明する。
レジスタ116は、メッセージ種別毎に、ジョブ開始、ブロック数、ハッシュ初期値の各情報の保持領域を有する。
本実施形態においては、CPU201は処理すべき複数のメッセージに対するジョブ開始、ブロック数、ハッシュ初期値の設定を、予めハッシュ処理回路100がジョブを開始する前に、レジスタ116に書き込む。
実施形態1においては、CPU201はメッセージAのハッシュ処理を途中で中断して、メッセージBのハッシュ処理を行うように処理要求することを予め決定していた。つまり、ハッシュ処理回路100に対して、メッセージAをブロックA0〜A52から成るメッセージと、ブロックA53〜A95から成るメッセージの2つのメッセージとして処理要求を出すものとした。本実施形態においては、CPU201はハッシュ処理すべき複数のメッセージに対する情報を最初にハッシュ処理回路100にレジスタ設定する。即ち、ブロック数96のメッセージAとブロック数4のメッセージBの情報を上記レジスタ116の所定の領域に設定する。そして、CPU201が上記レジスタ設定し、ハッシュ処理回路100が当該処理要求に対するハッシュ処理開始後に、CPU201はメッセージAのハッシュ処理を途中で中断することを決定する。さらに、メッセージAのブロック52以降にブロックB0からメッセージBのデータをハッシュ処理回路に転送するように、DMAC203を制御する。
そして、ハッシュ処理回路100は、レジスタ設定された複数のメッセージに対して、入力データアトリビュート信号139のメッセージ識別子、処理継続の情報に応じて、各メッセージ種別、処理継続有無を判定する。さらに、各メッセージ毎に適宜ハッシュ処理を行う。
また、ハッシュ処理回路100は、
・各メッセージの転送ブロック数をカウントするブロックカウンタ137のカウンタ値BC。
・アトリビュート情報のメッセージ識別子。
により、メッセージAに対してレジスタ設定されたブロック数96のデータ受信以前にメッセージBのブロックデータを受信したことを検知し、メッセージAのハッシュ処理を中断すべきことを判定する。
(ハッシュ処理)
図14は、2つのメッセージ(A0〜A95、B0〜B3)が図6に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。
ST201において、CPU201は第一のメッセージ(A0〜A95)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST202において、CPU201は第ニのメッセージ(B0〜B3)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST203において、ハッシュ処理回路100はメッセージの1ブロック分のデータをDMAC203対して、リードリクエストを出して読込む。
ST204において、読込んだブロックデータのメッセージをアトリビュート信号のメッセージ識別子により判定し、メッセージ識別子がメッセージAを示す場合はST205に進み、メッセージBを示す場合はST209に進む。
ST205において、ハッシュ処理回路100は1つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST206に進む。
ST206において、ハッシュ処理回路100は第一のメッセージ(A0〜A95)の1ブロックに対するハッシュ処理を行う。
ST207において、総ブロック数96の第一のメッセージ(A0〜A95)に対するハッシュ処理が完了したか判定し、完了している場合はST208に進み、完了していない場合はST203に戻る。
ST208において、ハッシュ処理回路100はDMAC203にライトリクエストして第一のメッセージ(A0〜A95)に対するハッシュ値を出力する。
ST209において、ハッシュ処理回路100は1つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST210に進む。
ST210において、ハッシュ処理回路100は第ニのメッセージ(B0〜B3)の1ブロックに対するハッシュ処理を行う。
ST211において、総ブロック数4の第ニのメッセージ(B0〜B3)に対するハッシュ処理が完了したか判定し、完了している場合はST212に進み、完了していない場合はST203に戻る。
ST212において、ハッシュ処理回路100はDMAC203にライトリクエストして第ニのメッセージ(B0〜B3)に対するハッシュ値を出力する。
ST213において、他のメッセージの処理が完了しているか判定し、完了している場合は処理を終了し、完了していない場合はST203に戻る。
本実施形態においては、実施形態1と同様に、不図示のT006からのT007において、CPU201がバス205、バス信号117を経由して、レジスタ116を設定する。ここでは、図12に示したレジスタ116のメッセージA用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。さらに、『ブロック数』領域に“96ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”を設定する。同様に、メッセージB用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てると共に、『ブロック数』領域に“4ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”を設定する。
その後、ハッシュ処理回路100はDMAC203がメモリから転送するメッセージのDMA入力データ120と入力データアトリビュート信号139を受信する。入力データアトリビュート信号139のメッセージ識別子、処理継続の情報、および、メッセージ毎にレジスタ内に保持する総ブロック数とDMA転送ブロック数に従って、メッセージ毎のハッシュ処理を適宜実行する。
(ハッシュ処理の詳細)
図15、図16は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。各々メッセージAからメッセージBに切替わる部分およびメッセージBからメッセージAに切替わる部分を示している。以下、実施形態1と異なる部分のみ説明する。
T000からT4237までの処理は実施形態1と同様である。T4237において加算処理部107は、内部状態変数値SA51_79とハッシュ中間値HA50を入力して加算処理をし、ハッシュ中間値HA51を出力する。そしてT4238において、ハッシュ中間値保持部A109がハッシュ中間値HA51を保持する。
T4237において、ハッシュ処理制御部113がブロックロード信号124をアサートする。拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、T4238において、メッセージ保持部101が保持するブロックA52を読み込む。
ここでブロックA52の転送終了後にメモリ202からハッシュ処理回路100にメッセージBの転送を開始するように、CPU201がDMAC203を制御したとする。T4238においてハッシュ処理制御部113は、メッセージ保持部101が保持していたブロックA52のデータを拡張メッセージ保持部102が保持したことを受けて、次ブロックのデータをリードすべくDMAリードリクエスト信号122をアサートする。
T4238からT4318において、ブロックA52に対するハッシュ処理がおこなわれる。
一方、T4239からT4253においてDMAC203は、DMAデータリードアクノレッジ信号123を返すと同時に、メモリ202からブロックB0をハッシュ処理回路100に転送する。そしてT4254においてメッセージ保持部101が、ブロックB0を保持する。また、ブロックB0の読み込みと同時に、ハッシュ処理制御部113は、入力データアトリビュート信号139を読み込み、“メッセージBである”こと、“内部状態変数値の初期値を用いる”ことを識別する。また、ブロックカウンタX140はカウンタ値をBCXとすると、メッセージBのブロックB0に対応するカウンタ値BCXを1にカウントアップする。ブロックカウンタ137はメッセージAのブロックA52に対応するカウンタ値BCとして53を保持する。
T4319においてハッシュ中間値保持部A109はハッシュ中間値HA52を保持する。ここで総ブロック数96のメッセージAに対するハッシュ処理は先頭ブロックから53ブロック分までしか完了していない為、T4319においてハッシュ処理制御部113は、DMAライトリクエスト信号122をアサートしない。また、DMAC203はハッシュ中間値HA52をハッシュ処理装置100からメモリ202へDMA転送しない。
(ブロック単位の動作)
図17Aと図17B(以下、まとめて図17)は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。尚、一部ステップ処理期間毎の詳細動作も説明する。
TB52において、データリードをするために、ハッシュ処理制御部113がDMAC203に対してDMAリードリクエスト信号122をアサートする。DMAC203は、DMAリードアクノレッジ信号123を返すと共にメッセージBの先頭ブロックB0をハッシュ処理装置100にDMA転送、メッセージ保持部101がブロックB0を保持する。
TB53において、ブロックB1のDMA転送およびブロックB0に対するハッシュ処理を行う。TB54において、ハッシュ処理制御部113はハッシュ中間値Bロード信号130をアサートしているので、ハッシュ中間値保持部B110は、TB53において求まったハッシュ中間値HB0を保持する。また、ハッシュ処理制御部113はメッセージA選択信号131をデアサートしている。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB0)をハッシュ値出力部114へ出力する。
以上により、TB54において、ハッシュ中間値保持部A109はハッシュ中間値HA52を保持し、ハッシュ中間値保持部B110はハッシュ中間値HB0を保持する。
ブロックB1に対するハッシュ処理は、ハッシュ中間値保持部B110が保持するハッシュ中間値HB0を用いて、TB54においておこなわれる。
以降、DMAC203は、TB54〜TB55においてブロックB2〜B3をメモリ202からハッシュ処理回路100にDMA転送する。
ここで、ブロックB3の転送終了後にメモリ202からハッシュ処理回路100に対してメッセージAの残りのデータ転送を再開するように、CPU201がDMAC203を制御したとする。そこでDMAC203は、TB56においてメッセージAを構成するブロックであるブロックA53をメモリ202からハッシュ処理回路100にDMA転送する。このとき、DMAC203は、メッセージAに対する入力データアトリビュート信号139内の処理継続情報として“ハッシュ中間値を用いる”ことを示す値を送信する。DMAC203がブロックA53の転送を完了し、ハッシュ処理回路100がブロックA53のデータを保持した後、ハッシュ処理制御部113は、入力データアトリビュート信号139を読み込む。そして、“メッセージAである”こと、“ハッシュ中間値を用いる”ことを識別する。また、ブロックカウンタX140はカウンタ値BCXとして4を保持する。ブロックカウンタ139はメッセージAのブロックA53に対応してカウンタ値BCを54にカウントアップする。尚、実施形態1においては、メッセージBのハッシュ処理完了の後、メッセージAのブロックA53からA95に対するレジスタ設定をおこなった後に、ブロックA53の転送を実施した。これに対して、本実施形態においてはブロックA53の転送はメッセージBのハッシュ処理完了前に実施可能となっている。
また、ハッシュ処理回路100は、TB54〜TB56においてブロックB1〜B3に対するハッシュ処理を行う。この間、ハッシュ処理制御部113はハッシュ中間値Aロード信号129をアサートせず、ハッシュ中間値Bロード信号130を適宜アサートする。そのため、ハッシュ中間値保持部A109はメッセージBのハッシュ中間値を保持せず、ハッシュ中間値保持部B110がメッセージBのハッシュ中間値を保持する。また、ハッシュ処理制御部113はメッセージA選択信号131をデアサートしている。そのため、セレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力を出力する。その他の処理はブロックA1〜A3に対する処理と同様である。
この結果、TB54〜TB56においてハッシュ処理回路100はハッシュ中間値HB1〜HB3を求める。
TB57において、ハッシュ中間値保持部A109はメッセージAのブロックA0〜A52のハッシュ中間値HA52を保持し、ハッシュ中間値保持部B110はメッセージBのブロックB0〜B3に対するハッシュ中間値HB3を保持する。メッセージBは図5に示すようにブロックB0〜B3で構成されるので、ハッシュ中間値HB3はメッセージBのハッシュ値HBとなる。TB57においてハッシュ処理制御部113はメッセージA選択信号131をデアサートしている。そのためセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA52)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部B110の出力(HB)をハッシュ値出力部114へ出力する。
ここで、レジスタ116のメッセージB用の『ブロック数』領域が保持する“4ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB57においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグをクリアする。また、ブロックカウンタ140のカウンタ値BCXをクリアする。
また、ハッシュ処理制御部113は、TB57においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HBをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB57においてDMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HBの格納を通知する。
同じくTB57において、CPU201はDMAC203からの割込みによって“メッセージB”を“4ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。
また、TB57において、ブロックA54のDMA転送およびブロックA53に対するハッシュ処理を行う。以降、DMAC203は、TB58〜TB98においてブロックA55〜A95をメモリ202からハッシュ処理回路100にDMA転送する。また、ハッシュ処理回路100は、TB58〜TB99においてブロックA54〜A95に対するハッシュ処理を行う。この間、ハッシュ処理制御部113はハッシュ中間値Bロード信号130をアサートせず、ハッシュ中間値Aロード信号129を適宜アサートする。そのため、ハッシュ中間値保持部B110はメッセージAのハッシュ中間値を保持せず、ハッシュ中間値保持部A109がメッセージAのハッシュ中間値を保持する。また、ハッシュ処理制御部113はメッセージA選択信号131をアサートしている。そのため、セレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力を出力する。その他の処理は他のブロックに対する処理と同様である。
この結果、TB100においてハッシュ中間値保持部A109は、ブロックA0〜ブロックA95に対するハッシュ中間値HA95を保持する。メッセージAは図5に示すようにブロックA0〜A95で構成されるので、ハッシュ中間値HA95はメッセージAのハッシュ値HAとなる。TB100においてハッシュ処理制御部113はメッセージA選択信号131をアサートしている。そのためセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部A109の出力(HA)をハッシュ値出力部114へ出力する。
ここで、レジスタ116のメッセージA用の『ブロック数』領域が保持する“96ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB100においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグをクリアする。また、ブロックカウンタ137のカウンタ値BCをクリアする。
また、ハッシュ処理制御部113は、TB100においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HAをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB100においてDMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HAの格納を通知する。
同じくTB100において、CPU201はDMAC203からの割込みによって“メッセージA”を“96ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。
以上、説明したように、本実施形態において、メッセージ識別子、処理継続の情報をメッセージのデータに付帯する入力データアトリビュート信号から抽出して識別する。これにより、第一のメッセージに対するハッシュ処理を途中で中断して、別の第二のメッセージに対するハッシュ処理を先に行う場合、実施形態1に比して、ハッシュ処理期間をさらに短縮することができる。すなわち、第一のメッセージの途中のブロックまでのハッシュ処理後に要していたハッシュ処理結果(ハッシュ中間値)のメモリへのDMA転送とメッセージ毎のハッシュ処理の開始時に要していたメッセージに対するレジスタ設定の時間を削減できる。また、第二のメッセージに対するハッシュ処理の完了時期をより早くすることができた。
具体的には、実施形態1におけるステップ毎のハッシュ処理のタイミングチャートを示した図9において、メッセージBのハッシュ値はTB58内のT4669の時点で出力されている。これに対して、実施形態2におけるステップ毎のハッシュ処理のタイミングチャートを示した図14において、メッセージBのハッシュ値HB03はTB57内のT4643の時点で出力されている。
実施形態2では実施形態1に比して、実施形態1のTB53の期間に対応する26基本処理期間分短縮されている。また、第一のメッセージの未処理部分の最初のブロックのDMA転送期間を第二のメッセージのハッシュ処理期間に隠蔽することができ、第一のメッセージの再開処理も実施形態1よりも早くすることができた。具体的には、図11において、実施形態1におけるメッセージAの先頭ブロックからブロックA53までのハッシュ中間値HA53はTB60内のT4776の時点で出力されている。これに対して、図16において、実施形態2におけるメッセージAの先頭ブロックからブロックA53までのハッシュ中間値HA53はTB58内のT4724の時点で出力されている。実施形態2では実施形態1に比して、実施形態1のTB53の期間とTB58の期間の和に対応する52基本処理期間分短縮されている。
なお、本実施形態においては、1つ前のブロックに対するハッシュ処理を完了した時点で、上記回路内に保持した1ブロック分のデータを拡張処理部にロードし、ロード後に、外部メモリからの次の1ブロック分のデータの転送を要求している。処理期間は増えるが、当該ロードした1ブロックに対するハッシュ処理が完了するまで当該ブロックのデータを保持部で保持して、その後、次の1ブロック分のデータの転送要求をしてもよい。このとき、当該ブロックに対するハッシュ処理を途中で破棄した場合も、当該ブロックのデータが回路内に保持されているので、外部メモリから再度読込むオーバーヘッドを削減する効果はある。
また、本実施形態においては、ハッシュ関数としてはSHA−1を用いたが、ハッシュ関数はMD5、SHA−256等、他のアルゴリズムであってもよいことは言うまでもない。
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成する構成としても構わない。
また、本実施形態においては、2種類のメッセージに対するハッシュ中間値を保持可能な構成としたが、これに限られない。例えば、3以上のハッシュ中間値保持部、ブロックカウンタ、レジスタ設定領域等を設けることにより、2種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。
また、本実施形態においては、1つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたが、これに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を1つあるいは複数備える構成としてもよい。
また、本実施形態では、メッセージAのハッシュ中間値はハッシュ中間値保持部Aに、メッセージBのハッシュ中間値はハッシュ中間値保持部Bに保持するというように各メッセージのハッシュ中間値とハッシュ中間値保持部の対応は固定的であるものとした。しかし、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持するハッシュ中間値保持情報保持部を設け、当該ハッシュ中間値保持情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定してもよい。
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、CPUが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてDMACを用いたが、他の転送手段を用いてもよい。
また、本実施形態においては、DMA入出力データは64ビットであるとしたが、他のビット数であってもよいことは言うまでもない。
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、DMA転送処理の基本処理期間Tは同一としたが、ステップ処理とDMA転送処理の基本処理期間は異なっていても構わない。
また、本実施形態においては、入力データアトリビュート信号にはメッセージ識別子、処理継続の情報を含むものとし、データ幅は8ビットであるとした。ただし、入力データアトリビュート情報としては他のメッセージ優先度等の情報を含んでもよく、情報に応じて信号のデータ幅が変わってもよい。
また、本実施形態においては、ハッシュ処理回路が入力メッセージのブロック番号をメッセージ毎の入力ブロック数をカウントして識別するものとしたが、入力データアトリビュート信号としてブロック番号が付帯している構成としてもよい。
また、本実施形態においては、CPUがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はDMAアクノレッジ信号をカウントすることにより、CPUが設定したブロック数のメッセージの供給を認識するものとした。ただし、メッセージの転送完了をCPUからレジスタ設定で通知する等他の方法を用いてもよい。
また、本実施形態においては、ハッシュ処理対象のメッセージとしてメッセージAとメッセージBに関して最初にレジスタ設定してそれ以降入力メッセージに応じてメッセージAあるいはメッセージBに対するハッシュ処理を行うものとした。しかし、例えば、上記メッセージAあるいはメッセージBに対するハッシュ処理の途中でメッセージCに対するハッシュ処理を開始する必要が生じた場合は、メッセージCに対するハッシュ処理要求のレジスタ設定を途中で追加してもよい。この場合、以降、入力メッセージに応じてメッセージA、メッセージB、メッセージCに対するハッシュ処理を行うことができる。
なお、本発明の実施形態は上記に限定されるものでなく種々に変更可能である。
<<実施形態3>>
実施形態2においては、各メッセージに関する処理要求の情報として、CPUがジョブ開始、ブロック数、ハッシュ初期値をハッシュ処理回路内のレジスタに予め設定していた。本実施形態3においては、上記に加えてメッセージ優先度の情報もCPUがハッシュ処理回路内のレジスタに予め設定する。
(ハッシュ処理回路の構成)
図18は本実施形態におけるハッシュ処理回路の構成を示した図である。以下、図18にもとづいて、実施形態2と異なる部分のみ説明する。
141は、ブロックデータを保持するメッセージ保持部Xである。メッセージ保持部X141は、次の条件が全て満たされる場合に、ハッシュ処理完了時点で、メッセージ保持部101が保持する。
・メッセージ保持部101が保持するブロックデータのメッセージの優先度が低い。
・ハッシュ処理中のブロックのメッセージの優先度が低い。
・当該ハッシュ処理中のブロックを自らが保持している
142はメッセージ保持部101が保持しているメッセージのデータをメッセージ保持部Xにロードするためにハッシュ処理制御部113が出力するブロックロード信号Xである。143はメッセージ保持部X141が後述するセレクタ144へ出力するメッセージXである。144はメッセージ132とメッセージX143のうち、いずれか一方を選択して、拡張メッセージ保持部102へ出力するセレクタである。145はセレクタ144の制御信号としてハッシュ処理制御部113が出力するメッセージX選択信号である。
(レジスタの記憶内容)
図19は、本実施形態のハッシュ処理回路100内のレジスタ116が保持する情報を示す図である。以下、実施形態2と異なる部分のみ説明する。
レジスタ116は、メッセージ種別毎に、ジョブ開始、ブロック数、ハッシュ初期値、メッセージ優先度の各情報の保持領域を有する。
本実施形態においては、実施形態2と同様に、T006からのT007において、CPU201がバス205、バス信号117を経由して、レジスタ116を設定する。ここでは、図19に示したレジスタ116のメッセージA用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。さらに、『ブロック数』領域に“96ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”、『メッセージ優先度』領域に“低優先”を設定する。同様に、メッセージB用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。さらに、『ブロック数』領域に“4ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”、 『メッセージ優先度』領域に“高優先”を設定する。
その後、ハッシュ処理回路100はDMAC203がメモリから転送するメッセージのDMA入力データ120と入力データアトリビュート信号139を受信する。そして、入力データアトリビュート信号139のメッセージ識別子、処理継続の情報およびメッセージ毎にレジスタの所定領域が保持する総ブロック数とDMA転送ブロック数に従って、メッセージ毎のハッシュ処理を適宜実行する。
(ハッシュ処理)
図20は、2つのメッセージ(A0〜A95、B0〜B3)が図6に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。
ST301において、CPU201は第一のメッセージ(A0〜A95)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST302において、CPU201は第ニのメッセージ(B0〜B3)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST303において、ハッシュ処理回路100はメッセージの1ブロック分のデータをDMAC203対して、リードリクエストを出して読込む。
ST304において、読込んだブロックデータのメッセージをアトリビュート信号のメッセージ識別子により判定し、メッセージ識別子がメッセージAを示す場合はST305に進み、メッセージBを示す場合はST312に進む。
ST305において、ハッシュ処理回路100は1つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST306に進む。
ST306において、ハッシュ処理回路100は、メッセージ保持部X141が低優先の第一のメッセージの破棄されたブロックを保持しているか判定する。メッセージ保持部Xが第一のメッセージの破棄されたブロックのデータを保持している場合はST307に進み、保持していない場合はST309に進む。
ST307において、ハッシュ処理回路100は低優先の第一のメッセージの破棄されたブロックに対するハッシュ処理を行う。
ST308において、総ブロック数96の第一のメッセージ(A0〜A95)に対するハッシュ処理が完了したか判定し、完了している場合はST311に進み、完了していない場合はST309に進む。
ST309において、ハッシュ処理回路100は第一のメッセージ(A0〜A95)の1ブロックに対するハッシュ処理を行う。
ST310において、総ブロック数96の第一のメッセージ(A0〜A95)に対するハッシュ処理が完了したか判定し、完了している場合はST311に進み、完了していない場合はST303に戻る。
ST311において、ハッシュ処理回路100はDMAC203にライトリクエストして第一のメッセージ(A0〜A95)に対するハッシュ値を出力する。
ST312において、ハッシュ処理回路100は1つ前のブロックが高優先の第二のメッセージであるか判定し、高優先の第二のメッセージである場合はST313に進み、低優先の第一のメッセージである場合はST314に進む。
ST313において、ハッシュ処理回路100は1つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST314に進む。
ST314において、ハッシュ処理回路100は第ニのメッセージ(B0〜B3)の1ブロックに対するハッシュ処理を行う。
ST315において、総ブロック数4の第ニのメッセージ(B0〜B3)に対するハッシュ処理が完了したか判定し、完了している場合はST316に進み、完了していない場合はST303に戻る。
ST316において、ハッシュ処理回路100はDMAC203にライトリクエストして第ニのメッセージ(B0〜B3)に対するハッシュ値を出力する。
ST317において、他のメッセージの処理が完了しているか判定し、完了している場合は処理を終了し、完了していない場合はST303に戻る。
(ハッシュ処理の詳細)
図21、図22、図23は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。各々メッセージAの先頭部分、メッセージAからメッセージBに切替わる部分およびメッセージBからメッセージAに切替わる部分を示している。以下、実施形態2と異なる部分のみ説明する。
T000からT024までの処理は実施形態2と同様である。T025において、ハッシュ処理制御部113はブロックロード信号124をアサートする。また、メッセージ保持部に保持されているメッセージAは低優先のため、ハッシュ処理制御部113はブロックロード信号124およびブロックロード信号X142をアサートする。メッセージ保持部X141はブロックロード信号X142のアサートを検知し、T026においてメッセージ保持部101が保持するブロックA0を読み込む。また、拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、T026においてセレクタ144の出力を読み込む。このとき、ハッシュ処理制御部113がメッセージX選択信号145をアサートしていないので、セレクタ144はメッセージ132とメッセージX143のうち、メッセージ132を出力する。
T000からT4237では、原則として実施形態2と同様の処理を実行する。ただし、本実施形態では、メッセージの優先度の基づきメッセージ132をメッセージ保持部X141に保持し、メッセージ保持部101の出力とメッセージ保持部X141の出力のいずれかをセレクタ144で選択して拡張メッセージ保持部102に出力する。
T4237において、ハッシュ処理制御部113がブロックロード信号124をアサートする。拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、T4238において、セレクタ144の出力であるメッセージ保持部102に保持されたブロックA52を読み込む。このとき、拡張メッセージ保持部102は、ブロックA52を16個の32ビットデータEA52_W00〜EA52_W15に分割して保持する。ハッシュ処理回路100はT4238からT4255までメッセージAのブロックA52に対するステップ0からステップ17の処理を行う。
同じくT4238においてハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。ハッシュ処理回路100は、T4238からT4253にかけてブロックB0をDMA転送で読み込み、T4254においてメッセージ保持部101はブロックB0を保持する。
T4255においてハッシュ処理制御部113は、入力データアトリビュート信号139のメッセージ識別子の情報によりメッセージBであることを検知する。さらに、レジスタ116の『メッセージ優先度』領域の情報によりメッセージBが“高優先”であることを検知する。そして、T4255まで処理していたメッセージAのブロック52に対するステップ処理を破棄して、高優先のメッセージBのハッシュ処理を先に行うために、ブロックロード信号124をアサートする。拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、T4256において、セレクタ144の出力であるメッセージ保持部101に保持されたブロックB0を読み込む。このとき、T4255においてハッシュ処理制御部113は、ブロックロード信号X142をアサートしないので、メッセージ保持部X141はメッセージ保持部101の出力であるメッセージ132(ブロックB0)を読み込まない。
以後ハッシュ処理回路100は、T4256からT4579にかけてメッセージBに対するハッシュ処理をおこない、DMAC203は、T4580からT4585にかけてメッセージBのハッシュ値HBを出力する。
また、メッセージ保持部101に保持したメッセージBの最後のブロックB3を拡張メッセージ保持部102にロードしたことに応じて、T4499においてハッシュ制御処理部113はDMAリードリクエスト信号122をアサートする。これにより、次のメッセージのデータがリードされる。T4500からT4514にかけて、DMAC203はメッセージAのブロックA53をDMA転送し、T4515においてメッセージ保持部101はブロックA53を保持する。このとき、メッセージ保持部101が保持するメッセージAは低優先であるが、メッセージ保持部X141に保持しているデータのハッシュ処理は完了していないため、ハッシュ処理制御部113はブロックロード信号X142をアサートしない。従って、メッセージ保持部X141はメッセージ保持部101の出力であるメッセージ132(ブロックA53)を読み込まない。
また、T4500において入力データアトリビュート信号139を読み込み、ハッシュ処理制御部113はメッセージAの読み込みが再開したことを検知する。そこでT4501においてハッシュ処理制御部113はメッセージX選択信号145をアサートする。これにより、セレクタ144はメッセージ132とメッセージX143のうち、メッセージX143を出力する。T4579においてハッシュ処理制御部113は、ブロックロード信号124をアサートする。T4580において拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、セレクタ144の出力であるメッセージX143(A52)を読み込む。そしてハッシュ処理制御部113は、T4580においてメッセージX選択信号145をデアサートする。T4580からは、先ほど途中で破棄したブロックA52の処理を再び行う。
(ブロック単位の動作)
図24Aと図24B(以下、まとめて図24)は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。
TB52において、DMAC203がハッシュ処理回路100にブロックB0をDMA転送するのは、実施形態2と同様である。しかし、DMAC203が、ハッシュ処理回路100からメッセージBのハッシュ値HBを転送するのはTB56内のT4580の時点となる。実施形態2においては、ハッシュ処理回路100はハッシュ値HBをTB57内のT4643の時点で出力していた。したがって、本実施形態3においてはメッセージBのハッシュ値の出力開始時期が実施形態2に比して63基本処理期間分短縮されている。なお、上記63基本処理期間は1ブロック処理期間81からメッセージBのブロックB0のデータを保持するのに要する18基本処理期間を引いた値となる。そして、この18処理期間は、途中で破棄したHA52のハッシュ処理をおこなっていた期間でもある。
一方、本実施形態においては、ハッシュ処理回路100はハッシュ中間値HA53をTB58内のT4742の時点で出力する。実施形態2においては、ハッシュ処理回路100はハッシュ中間値HA53をTB58内のT4724の時点で出力していた。したがって、本実施形態3においてはメッセージHA53のハッシュ値の出力開始時期は実施形態2に比して18基本処理期間遅延している。
また、本実施形態においては、メッセージBのメッセージ優先度が高優先であるが、これに限られない。メッセージBのメッセージ優先度がメッセージAと同様に低優先の場合は、実施形態2と同様に、ハッシュ処理回路100はブロックA52に対するハッシュ処理を途中で破棄しない。その代わり、ブロックA52のハッシュ中間値を生成後に、ブロックB0に対するハッシュ処理を行う。
以上のように、本実施形態では、対象メッセージをメッセージのデータに付帯する入力データアトリビュート信号から抽出して識別することおよびメッセージ保持部に保持したメッセージを更に保持する第二のメッセージ保持部を設けている。例えば、第一のメッセージに対するハッシュ処理の途中で中断して、別の第二のメッセージのハッシュ処理を先に行う場合を考える。本実施形態の構成によれば、実施形態2に比して、第二のメッセージのデータを保持するまでの間に処理中の第一のメッセージのあるブロックに対するハッシュ処理を破棄して、第二のメッセージの最初のブロックを優先的に処理することができる。したがって、第二のメッセージに対するハッシュ処理の完了時期をより早くすることができる。
また、本実施形態においては、ハッシュ関数としてはSHA−1を用いたが、ハッシュ関数はMD5、SHA−256等、他のアルゴリズムであってもよいことは言うまでもない。
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成する構成としても構わない。
また、本実施形態においては、2種類のメッセージに対するハッシュ中間値を保持可能な構成としたがこれに限られない。例えば、3以上のハッシュ中間値保持部、ブロックカウンタ、レジスタ設定領域等を設けることにより、3種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。また、本実施形態においては、1つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたがこれに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を1つあるいは複数備える構成としてもよい。
また、メッセージA、Bのハッシュ中間値はそれぞれハッシュ中間値保持部A、Bに保持するというように、各メッセージのハッシュ中間値とハッシュ中間値保持部の対応が固定的な場合を説明したが、これに限られない。例えば、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持するハッシュ中間値保持情報保持部を設け、当該ハッシュ中間値保持情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定してもよい。
また、本実施形態においては、メッセージ優先度は高優先、低優先の2段階としたが、メッセージ優先度は3段階以上にして、より優先度の高いメッセージの処理を優先的にハッシュ処理するような構成にしてもよい。
また、本実施形態においては、第一のメッセージ保持部に保持したメッセージを更に保持するメッセージ保持部を1つ備える構成としたが、これに限られない。例えば、優先度の段階数、ハッシュ中間値保持部の数に応じて、第一のメッセージ保持部に加えて2以上のメッセージ保持部を備える構成としてもよい。
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、CPUが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてDMACを用いたが、他の転送手段を用いてもよい。
また、本実施形態においては、DMA入出力データは64ビットであるとしたが、他のビット数であってもよいことは言うまでもない。
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、DMA転送処理の基本処理期間Tは同一としたが、ステップ処理とDMA転送処理の基本処理期間は異なっていても構わない。
また、本実施形態においては、メッセージ優先度は予め処理要求の情報としてCPUがレジスタの所定領域に設定するものとしたが、入力データアトリビュート信号にメッセージ優先度を含めてもよい。
また、本実施形態においては、入力データアトリビュート信号にはメッセージ識別、処理継続の情報を含むものとし、データ幅は8ビットであるとしたが、これに限られない。例えば、入力データアトリビュート情報としては他のメッセージ優先度、ブロック識別子等の情報を含んでもよく、情報に応じて信号のデータ幅が変わってもよい。
また、本実施形態においては、ハッシュ処理回路が入力メッセージのブロック番号をメッセージ毎の入力ブロック数をカウントして識別するものとしたが、入力データアトリビュート信号としてブロック番号が付帯している構成としてもよい。
また、本実施形態では、CPUがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はメッセージ毎にDMAアクノレッジ信号をカウントすることにより、CPUが設定したブロック数のメッセージの供給を認識する。しかし、これに限られず、例えば、メッセージの転送完了をCPUからレジスタ設定で通知する等他の方法を用いてもよい。
また、本実施形態においては、レジスタの所定領域が保持するメッセージ優先度の情報により、低優先のメッセージのブロックに対するハッシュ処理を途中で破棄するようにしたが、これに限られない。例えば、アトリビュート信号中のメッセージ識別子にメッセージ優先度の意味を兼ねさせる、あるいは、他の処理中断指示信号を入力することにより、高優先のメッセージを優先して処理中のメッセージに対するハッシュ処理の破棄を判断してもよい。
また、本実施形態では、ハッシュ処理対象のメッセージとしてメッセージAとメッセージBに関して最初にレジスタ設定してそれ以降入力メッセージに応じてメッセージAあるいはメッセージBに対するハッシュ処理を行う場合を説明したがこれに限られない。例えば、上記メッセージAあるいはメッセージBに対するハッシュ処理の途中でメッセージCに対するハッシュ処理を開始する必要が生じた場合を考える。この場合は、メッセージCに対するハッシュ処理要求のレジスタ設定を途中で追加すれば、以降、入力メッセージに応じてメッセージA、メッセージB、メッセージCに対するハッシュ処理を行うことができる。
なお、本発明の実施形態は上記に限定されるものでなく、種々に変更可能である。
上記のように、実施形態1〜3の構成によれば、ブロック単位で被処理メッセージを選択してハッシュ処理を行う際のオーバーヘッドを軽減することができると共に、ハッシュ処理の安全性を維持することができる。
<<実施形態4>>
(ハッシュ処理回路の構成)
図25は本発明の実施形態4におけるハッシュ処理回路の構成を示した図である。
100はハッシュ処理回路である。101はメッセージ保持部Aである。メッセージ保持部A101は、後述する外部のDMAコントローラが外部のメモリからハッシュ処理回路100にDMA転送する第一のメッセージの1ブロック分のデータを一時的に保持しておく。以下、外部のDMAコントローラをDMACと呼び、第一のメッセージをメッセージAと呼ぶ。
同様に、141はDMACが外部のメモリからハッシュ処理回路100にDMA転送する第ニのメッセージ(以下、メッセージBと呼ぶ)の1ブロック分のデータを一時的に保持しておくためのメッセージ保持部Bである。132はメッセージ保持部A101の出力のメッセージAである。143はメッセージ保持部B141の出力のメッセージBである。
102はメッセージAを拡張した拡張メッセージAを一時的に保持しておくための拡張メッセージ保持部A(第1の拡張メッセージ保持手段)である。146はメッセージBを拡張した拡張メッセージBを一時的に保持しておくための拡張メッセージ保持部B(第2の拡張メッセージ保持手段)である。149は拡張メッセージ保持部A102の出力の拡張メッセージAである。150は拡張メッセージ保持部B146の出力の拡張メッセージBである。144は拡張メッセージA149と拡張メッセージB150のうち、いずれか一方を選択して、後述するメッセージ拡張処理部103へ出力するセレクタである。133はセレクタ144の出力の拡張メッセージである。103は拡張メッセージ133を入力し、メッセージ拡張処理を行うメッセージ拡張処理部である。104は入力メッセージの各ブロックに対するステップ0からステップ79のステップ処理を1ステップ単位で順次行うステップ処理部である。
105はステップ処理部104で処理する内部状態変数値を選択するセレクタである。106はメッセージAに関するステップ処理部104の出力である内部状態変数値を一時的に保持する内部状態変数値保持部A(第1の変数値保持手段)である。151はメッセージBに関するステップ処理部104の出力である内部状態変数値を一時的に保持する内部状態変数値保持部B(第2の変数値保持手段)である。152は内部状態変数値保持部A106の出力の内部状態変数値Aである。153は内部状態変数値保持部B151の出力である内部状態変数値Bである。154は内部状態変数値A152と内部状態変数値B153のうち、いずれか一方を選択して、セレクタ105へ出力するセレクタである。134はセレクタ154の出力である内部状態変数値である。
107は全ステップ分の処理終了後の内部状態変数値と前のブロックまでのハッシュ中間値を加算処理するための加算処理部である。108は加算処理部107に入力するハッシュ中間値として、ハッシュ初期値126と後述するハッシュ中間値119のうち、いずれか一方を選択するセレクタである。109はメッセージAに関する加算処理部107の出力であるハッシュ中間値を保持するハッシュ中間値保持部Aである。135はハッシュ中間値保持部Aの出力のハッシュ中間値Aである。110はメッセージBに関する加算処理部107の出力であるハッシュ中間値を保持するハッシュ中間値保持部Bである。136はハッシュ中間値保持部Bの出力のハッシュ中間値Bである。
111はハッシュ中間値A135とハッシュ中間値B136のうち、いずれか一方を選択するセレクタである。119はセレクタ111の出力のハッシュ中間値である。112は前のブロックまでのハッシュ処理の結果であるハッシュ中間値119とハッシュ初期値126のうち、いずれか一方を選択するセレクタである。113は外部のDMACあるいはCPUとの間のデータ送受信およびハッシュ処理を制御するための各種信号を生成するハッシュ処理制御部である。114はメッセージの区切り毎に160ビットのハッシュ中間値に32ビットのダミーデータを付加して、3つの64ビットのデータとしてハッシュ処理回路100の外部へDMA転送によって送信するためのハッシュ値出力部である。116はハッシュ処理回路100の外部のCPU等が設定する、ハッシュ処理回路100の動作パラメタを保持するレジスタである。
117はレジスタ116にデータを入出力するためのアドレス信号、データ信号、制御信号等からなるバス信号である。118はDMACとの間で送受信するDMAデータ/制御信号であり、後述するDMA入力データ、DMA出力データ、DMAリクエスト信号、DMAアクノレッジ信号からなる。119はセレクタ111によって選択されたハッシュ中間値である。120はDMACがハッシュ処理回路100に出力するDMA入力データであり、メッセージ保持部A101あるいはメッセージ保持部B141が当該DMA入力データを保持する。
121はハッシュ処理回路100がDMACへ出力するDMA出力データであり、ハッシュ値出力部114がハッシュ値あるいはハッシュ中間値を出力する。122はハッシュ回路100がDMACに出力するDMAリクエスト信号である。DMAリクエスト信号122は、ハッシュ処理制御回路113が入力データのリード、出力データのライト要求時に各々DMAリードリクエスト信号、DMAライトリクエスト信号をアサートする。
123はDMACがハッシュ処理回路100に出力するDMAアクノレッジ信号である。DMAアクノレッジ信号123は、DMACは入力データのリード要求に対してはDMAリードアクノレッジ信号のアサートと共に入力データを出力し、出力データのライト要求に対してはDMAライトアクノレッジ信号のアサートと共に出力データを取り込む。なお、上記DMAリクエスト信号122、DMAアクノレッジ信号123は、リード/ライトをまとめて示している。
124はブロックAロード信号である。
ブロックAロード信号124は、メッセージAに関するブロックに対するハッシュ処理の開始時に、メッセージ保持部A101が格納しているメッセージA132を拡張メッセージ保持部102にロードするためにハッシュ処理制御部113から出力される。ここで、メッセージA132は、0番目から15番目の拡張メッセージに相当する。
142はブロックBロード信号である。ブロックBロード信号142は、メッセージBに関するブロックに対するハッシュ処理の開始時に、メッセージ保持部B141が格納している拡張メッセージB156を拡張メッセージ保持部B146にロードするために、ハッシュ処理制御部113が出力する。拡張メッセージB156は、0番目から15番目の拡張メッセージに相当する。
125はセレクタ105の制御信号としてハッシュ処理制御部113が出力するハッシュ中間値選択信号である。
126はレジスタ116に設定されたハッシュ処理の初期値を示す信号で、ハッシュ処理制御部113がセレクタ112に出力するハッシュ初期値である。127は、セレクタ112の制御信号としてハッシュ処理制御部113が出力するハッシュ初期値選択信号Xである。128は、セレクタ108の制御信号としてハッシュ処理制御部113が出力するハッシュ初期値選択信号Yである。129は、メッセージAに関する加算処理部107の出力をハッシュ中間値としてハッシュ中間値保持部A109にロードするためにハッシュ処理制御部113が出力するハッシュ中間値Aロード信号である。
130は、メッセージBに関する加算処理部107の出力をハッシュ中間値としてハッシュ中間値保持部B110にロードするためにハッシュ処理制御部113が出力するハッシュ中間値Bロード信号である。131は、セレクタ111の制御信号としてハッシュ処理制御部113が出力するメッセージA選択信号Xである。145は、セレクタ144の制御信号および内部状態変数値保持部A106のロード信号としてハッシュ処理制御部113が出力するメッセージA選択信号Yである。155はインバータであり、メッセージA選択信号Y145を入力して、反転出力のメッセージB選択信号Y155を出力する。137はハッシュ処理回路100が受け取ったメッセージAのブロック数をカウントするブロックカウンタAである。140はハッシュ処理回路100が受け取ったメッセージBのブロック数をカウントするブロックカウンタBである。ハッシュ処理制御部113はメッセージを構成する所定数のブロックに対するハッシュ処理を完了したときに、ブロックカウンタA137あるいはブロックカウンタB140のカウンタ値をクリアする。
138はメッセージAのブロック毎に処理するステップ数をカウントするステップカウンタAであり、所定数のステップをカウントしたときにクリアされる。157はメッセージBのブロック毎に処理するステップ数をカウントするステップカウンタBであり、所定数のステップをカウントしたときにクリアされる。なお、ブロックカウンタA137、ブロックカウンタB140のカウンタ値は、n番目(n=0、・・・)のブロック処理に対して(n+1)の値を示す。ステップカウンタA138、ステップカウンタB157のカウンタ値は、n番目(n=0、・・・、79)のステップ処理に対して(n+1)の値を示す。
139はDMAC203がDMA入力データ120と同期してハッシュ回路100に出力する入力データアトリビュート信号である。入力データアトリビュート信号の内容としては、メッセージ識別子、処理継続が含まれる。
『メッセージ識別子』は、DMACが送信するメッセージを所定の部分信号によって識別する識別子である。例えば、メッセージの種類が2種類の場合は、所定の部分信号が1なら“メッセージAを処理すること”、0なら“メッセージBを処理すること”を示す。
『処理継続』は、“内部状態変数値の初期値を用いる”か、あるいは、“ハッシュ中間値を用いる”かを、所定の部分信号によって識別する識別子である。ここで、“内部状態変数値の初期値を用いる”は、DMACが送信する当該メッセージに対するハッシュ処理に用いる内部状態変数値の初期値として、レジスタ116の『ハッシュ初期値』領域に保持することを意味する。“ハッシュ中間値を用いる”は、ハッシュ中間値保持部A109あるいはハッシュ中間値保持部B110が保持する当該メッセージを使用することを意味する。『処理継続』は、例えば、所定の部分信号が1なら“ハッシュ中間値を用いる”こと、0なら“ハッシュ初期値を用いる”ことを示すようにして表現することができる。
146は入力データアトリビュート信号の部分信号であり、DMACよりメッセージA出力時にオンするメッセージA識別信号である。147はインバータであり、メッセージA識別信号146を入力して、その反転出力であるメッセージB識別信号148を出力する。
本実施形態において、ハッシュ処理回路100は、ハッシュ処理のうち、パディング処理以外のメッセージ拡張処理、ステップ処理、加算処理を行う。パディング処理は、後述するハッシュ処理システム200のハッシュ処理回路100以外の部分、具体的には、後述するCPU201とメモリ202が行う。
(システム構成例)
図26はハッシュ処理回路100を動作させるためのシステムの構成例を示した図である。200はハッシュ処理システムである。201はハッシュ処理システム200の動作を制御するCPUである。202はハッシュ処理するメッセージ、ハッシュ値などを保持するためのメモリである。203はメモリ202からハッシュ処理回路100にメッセージを転送し、ハッシュ処理回路100からメモリ202にハッシュ値を転送するダイレクト・メモリ・アクセス・コントローラ(DMAC)である。204はハッシュ処理システム200の割込み信号を制御する割込み制御部である。205はハッシュ処理回路100、CPU201、メモリ202、DMAC203、割込み制御部204を接続するバスであり、アドレス信号、データ信号、制御信号等からなる。206はDMAC204から割込み制御部204への割込み信号である。本実施形態においては、DMAC203がハッシュ処理回路100からメモリ202へハッシュ値を転送したあとに、割込み信号206によってDMAC203から割込み制御部204に割込みを通知する。割込み制御部204は不図示の割込み信号により、CPU201にメモリへのハッシュ値格納を通知する。
(レジスタの記憶内容)
図27は、本実施形態のハッシュ処理回路100内のレジスタ116が保持する情報を示す図である。
レジスタ116は、メッセージ毎に、ジョブ開始、ブロック数、ハッシュ初期値、メッセージ優先度の各情報の保持領域を有する。『ジョブ開始』領域の情報は、他の『ブロック数』、『ハッシュ初期値』、『メッセージ優先度』領域に設定された情報に基づいて“ハッシュ処理を開始する”こと、あるいは、“ハッシュ処理を開始しない”ことを示す。例えば、各々当該領域内の所定bitの1、0によって示すことができる。以下、当該所定bitを1あるいは0に設定することを各々フラグを立てる、フラグをクリアすると呼ぶ。
CPU201は1つのメッセージに対するハッシュ処理要求毎に、“ハッシュ処理を開始する”ことを示す為に、ハッシュ処理回路100のレジスタ116の当該『ジョブ開始』領域の所定フラグを立てる。ハッシュ処理回路100は当該領域の所定フラグが立っている場合にハッシュ処理を開始する。そして、ハッシュ処理回路100は、処理中のメッセージに対するハッシュ処理が完了した時点で、“ハッシュ処理を開始しない”ことを示す為に当該フラグをクリアする。
『ブロック数』領域の情報は、処理要求の中のブロック数を当該領域内の所定bitによって示すものである。例えば、所定bitの示す値が処理するブロック数を示す場合は、所定bitの値が0x0004ならば処理するブロック数は4となる。
『ハッシュ初期値』領域の情報は、処理要求の中の内部状態変数値の初期値(ハッシュ初期値)を示すものである。SHA−1の場合、内部状態変数値は5つの32bitのデータから構成されるため、当該領域の所定の160bitによってハッシュ初期値を示す。尚、CPU201は当該『ハッシュ初期値』領域に、SHA−1のアルゴリズムの内部状態変数値の初期値を書き込んでもよいし、中断したハッシュ処理を再開して処理する為に、ハッシュ中間値に相当する値を書き込んでもよい。
『メッセージ優先度』領域の情報は、処理要求の優先度を当該領域内の所定bitによって示すものである。例えば、優先度が高低の2段階の場合は、当該領域内の所定bitが“0”の場合は低優先、“1”の場合は高優先となる。
尚、CPU201はハッシュ処理要求を有する複数のメッセージについて、レジスタ116内のメッセージごとの『ジョブ開始』、『メッセージ識別子』、『ブロック数』、『ハッシュ初期値』、『メッセージ優先度』領域に所定の値を書き込む。これによりハッシュ処理を開始する。
なお、メッセージの例は、実施形態1と同様に図5で示される。また、ハッシュ処理されるメッセージA及びメッセージBがメモリ203からハッシュ処理回路100に転送される場合の転送順序は、実施形態1と同様に図6で示される。
本実施形態においては、CPU201はハッシュ処理すべき複数のメッセージに対する情報を最初にハッシュ処理回路100にレジスタ設定する。即ち、ブロック数96のメッセージAとブロック数4のメッセージBの情報を上記レジスタ116の所定の領域に設定する。そして、CPU201が上記レジスタ設定し、ハッシュ処理回路100が当該処理要求に対するハッシュ処理開始後に、CPU201はメッセージAのハッシュ処理を途中で中断することを決定する。そして、メッセージAのブロック52以降にブロックB0からメッセージBのデータをハッシュ処理回路に転送するようにDMAC203を制御する。
そして、ハッシュ処理回路100は、レジスタ設定された複数のメッセージに対して、入力データアトリビュート信号139のメッセージ識別子、処理継続の情報に応じて、各メッセージ種別、処理継続有無を判定する。そして、各メッセージ毎に適宜ハッシュ処理を行う。また、ハッシュ処理回路100は、メッセージAに対してレジスタ設定されたブロック数96のデータ受信以前にメッセージBのブロックデータを受信したことを検知し、メッセージAのハッシュ処理を中断すべきことを判定する。ここで、メッセージBのブロックデータの受信検知は、各メッセージの転送ブロック数をカウントするブロックカウンタA137のカウンタ値BCAとアトリビュート情報のメッセージ識別子とに基づいて、行うことができる。
(ハッシュ処理)
図28は、本実施形態のハッシュ処理システムにおける、2つのメッセージ(A0〜A95、B0〜B3)が図6に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。
ST401において、CPU201は第一のメッセージ(A0〜A95)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST402において、CPU201は第ニのメッセージ(B0〜B3)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST403において、ハッシュ処理回路100はメッセージの1ブロック分のデータをDMAC203対して、リードリクエストを出して読込む。
ST404において、読込んだブロックデータのメッセージをアトリビュート信号のメッセージ識別子により判定し、メッセージ識別子がメッセージAを示す場合はST405に進み、メッセージBを示す場合はST412に進む。
ST405において、ハッシュ処理回路100は1つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST406に進む。
ST406において、ハッシュ処理回路100は、メッセージ保持部A101が低優先の第一のメッセージのステップの区切りで中断されたブロックを保持しているか判定する。メッセージ保持部A101が第一のメッセージのステップの区切りで中断されたブロックのデータを保持している場合はST407に進み、保持していない場合はST409に進む。
ST407において、ハッシュ処理回路100は低優先の第一のメッセージのステップの区切りで中断されたブロックに対するハッシュ処理を行う。
ST408において、総ブロック数96の第一のメッセージ(A0〜A95)に対するハッシュ処理が完了したか判定し、完了している場合はST411に進み、完了していない場合はST409に進む。
ST409において、ハッシュ処理回路100は第一のメッセージ(A0〜A95)の1ブロックに対するハッシュ処理を行う。
ST410において、総ブロック数96の第一のメッセージ(A0〜A95)に対するハッシュ処理が完了したか判定し、完了している場合はST411に進み、完了していない場合はST403に戻る。
ST411において、ハッシュ処理回路100はDMAC203にライトリクエストして第一のメッセージ(A0〜A95)に対するハッシュ値を出力する。
ST412において、ハッシュ処理回路100は1つ前のブロックが高優先の第二のメッセージであるか判定し、高優先の第二のメッセージである場合はST413に進み、低優先の第一のメッセージである場合はST414に進む。
ST413において、ハッシュ処理回路100は1つ前の第二のメッセージのブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST415に進む。
ST414において、ハッシュ処理回路100は第一のメッセージの1つ前のブロックのステップに対するハッシュ処理中か否かを判定する。ハッシュ処理中の場合は当該ステップのハッシュ処理が完了するまで待ち、当該ステップに対するハッシュ処理が完了している場合は当該ステップまでの内部状態変数値を保存して当該メッセージに対するハッシュ処理は一旦中断して、ST415に進む。
ST415において、ハッシュ処理回路100は第ニのメッセージ(B0〜B3)の1ブロックに対するハッシュ処理を行う。
ST416において、総ブロック数4の第ニのメッセージ(B0〜B3)に対するハッシュ処理が完了したか判定し、完了している場合はST417に進み、完了していない場合はST403に戻る。
ST417において、ハッシュ処理回路100はDMAC203にライトリクエストして第ニのメッセージ(B0〜B3)に対するハッシュ値を出力する。
ST418において、他のメッセージの処理が完了しているか判定し、完了している場合は処理を終了し、完了していない場合はST403に戻る。
(ハッシュ処理の詳細)
図29〜図31は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。各々メッセージAの先頭部分、メッセージAからメッセージBに切替わる部分およびメッセージBからメッセージAに切替わる部分を示している。尚、TXXXはステップ処理およびDMA転送処理の基本単位となっている動作クロック周期Tに基づく期間を表す。本実施形態において、ハッシュ処理回路100は周期Tの動作クロックで同期設計されている。また、例えば、メッセージAの各512ビットのブロックのデータは32ビットの0番目から15番目の16個の拡張メッセージW0〜W15に相当する。例えば、メッセージAの0番目のブロックをA0、A0の0番目と1番目の32ビットデータをA0_W00―W01、A0の最初の16個の拡張メッセージをEA0_W00−W15と表記する。同様に、例えば、ブロックA0の0番目のステップの内部状態変数値をSA0_00、ブロックA0のハッシュ中間値をHA0と表記する。
以下、単位期間毎の各部の動作を説明する。
T000において、データライトをするために、ハッシュ処理制御部113がDMAC203に対してDMAライトリクエスト信号122をアサートする。T001において、DMAC203は、DMAライトアクノレッジ信号123を返すと共に、ハッシュ値出力部114がDMA出力データ116として出力するハッシュ値(ここではHAX)の最初の64ビットをメモリ202に転送する。以下、T002からT005にかけて、DMAC203はハッシュ値HAXをメモリ202に転送する。この間、ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ここでは、T005までにDMAライトアクノレッジ信号123が3回アサートされたことを確認し、T006においてDMAライトリクエスト信号122をデアサートする。
T006およびT007において、CPU201がバス205、バス信号117を経由して、処理すべき複数のメッセージに関するレジスタ116を設定する。具体的には、各メッセージごとに、図27に示したレジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。また、メッセージAの『ブロック数』領域には“96ブロック分処理する”こと、メッセージBの『ブロック数』領域には“4ブロック分処理する”こと、両メッセージの『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”を設定する。
レジスタ116のメッセージAおよびメッセージBの『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、T008の処理を行う。T008においては、データリードをするために、ハッシュ処理制御部113がDMAC203に対してDMAリードリクエスト信号122をアサートする。T009において、DMAC203は、DMAリードアクノレッジ信号123を返す。それと同時にメモリ202に保持されたメッセージAの先頭ブロックA0の、最初の64ビット(A0_W00−W01)をハッシュ処理装置100に転送する。このとき、DMAC203は、DMA入力データ120と共に入力データアトリビュート信号139を出力する。入力データアトリビュート信号139の部分信号であるメッセージA識別信号146はメッセージAを示す“1”となっている。また、入力データアトリビュート信号139の部分信号である不図示の処理継続信号は“内部状態変数値の初期値を用いる”ことを示す“0”となっている。
T010において、メッセージ保持部A101は64ビットデータA0_W00−W01を保持する。以下、T011からT023にかけて、DMAC203はブロックA0をメモリ202からハッシュ処理回路100に転送する。この間、ハッシュ処理制御部113は、DMAC203がDMAアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113はT023までにDMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認し、T024においてDMAリードリクエスト信号122をデアサートする。レジスタ116のメッセージAの『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立った状態で、ブロックカウンタA137はDMAリードリクエスト信号122のデアサート回数により、処理するブロック数のカウントを行う。ブロックカウンタA137のカウント値をBCAとすると、ここでBCAは1となる。そして同じくT024において、メッセージ保持部A101がブロックA0を保持する。
T025において、ハッシュ処理制御部113がブロックAロード信号124をアサートする。
T026において、拡張メッセージ保持部A102はブロックAロード信号124のアサートを検知し、メッセージ保持部A101に保持されたブロックA0を読み込む。このとき、拡張メッセージ保持部A102は、ブロックA0を16個の32ビットデータEA0_W00〜EA0_W15に分割して保持する。ブロックAロード信号124アサート後に、ステップカウンタA138は基本処理期間T毎の不図示のクロックにより、ステップ数をカウントする。ステップカウンタA138のカウント値をSCAとすると、ここでSCAは1となる。以降、ステップカウンタA138はカウンタ値SCAが80になるまで、1ステップ処理の単位の基本処理期間Tのクロック毎にカウントアップする。ハッシュ処理制御部113は、メッセージ保持部A101が保持していたデータが拡張メッセージ保持部A102にロードされたことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT026においてセレクタ144は、メッセージA選択信号Y145のアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージA149を拡張メッセージ133とする。そして、この拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくT026においてメッセージ拡張処理部103は、セレクタ144を介して、拡張メッセージ保持部A102が保持する拡張メッセージ133(EA0_W00〜EA0_W15)を入力して、32ビットデータEA0_W16を求める。
同じくT026においてハッシュ処理制御部113は、
・入力データアトリビュート信号139の部分信号である処理継続信号が“内部状態変数値の初期値を用いる”ことを示す“0”となっていること。並びに、
・ステップカウンタA138のカウント値SCAが“1”であること。
に応じて、ハッシュ初期値選択信号X127をアサートする。また、T026においてハッシュ処理制御部113は、ステップカウンタA138のカウント値SCAが“1”であることを受けて、ハッシュ中間値選択信号125をアサートする。
同じくT026においてセレクタ112は、ハッシュ初期値選択信号X127がアサートされているので、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ初期値126を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ初期値126を出力する。
同じくT026においてステップ処理部104は、拡張メッセージ保持部A102が保持するEA0_W00とハッシュ初期値126を入力し、SHA−1のステップ0の処理をして内部状態変数値SA0_00を求める。
T027において、ステップカウンタA138はカウントアップし、カウンタ値SCAは“2”となる。
同じくT027において拡張メッセージ保持部A102は、EA0_W01〜EA0_W15およびT026においてメッセージ拡張処理部103で求めたEA0_W16を保持する。
同じくT027において内部状態変数値保持部A106は、メッセージA選択信号Y145のアサートを受けて、T026において求めた内部状態変数値SA0_00を保持する。
同じくT027においてメッセージ拡張処理部103は、セレクタ144を介して、拡張メッセージ保持部A102が保持する拡張メッセージ133(EA0_W01〜EA0_W16)を入力して、32ビットデータEA0_W17を求める。
同じくT027においてハッシュ処理制御部113は、ステップカウンタA138のカウント値SCAが“1”ではないことを受けて、ハッシュ初期値選択信号X127とハッシュ中間値選択信号125をデアサートする。
同じくT027においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA0_00を出力する。
同じくT027においてステップ処理部104は、拡張メッセージEA0_W01と内部状態変数値SA0_00を入力し、SHA−1のステップ1の処理をして内部状態変数値SA0_01を求める。
同じくT027においてDMAC203は、DMAリードアクノレッジ信号123を返すと同時に、メモリ202から64ビットデータA1_W00−W01をハッシュ処理装置100に転送する。
T028において、ステップカウンタA138はカウントアップし、カウンタ値SCAは“3”となる。
同じくT028において拡張メッセージ保持部A102は、EA0_W02〜EA0_W16およびT027においてメッセージ拡張処理部103で求めたEA0_W17を保持する。
同じくT028において内部状態変数値保持部A106は、メッセージA選択信号Y145のアサートを受けて、T027において求めた内部状態変数値SA0_01を保持する。
同じくT028においてメッセージ拡張処理部103は、セレクタ144を介して、拡張メッセージ保持部A102が保持する拡張メッセージA149(EA0_W02〜EA0_W17)を入力して、32ビットデータEA0_W18を求める。
同じくT028においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA0_01を出力する。
同じくT028においてステップ処理部104は、拡張メッセージ保持部A102が保持するEA0_W02と内部状態変数値SA0_01を入力し、SHA−1のステップ2の処理をして内部状態変数値SA0_02を求める。
同じくT028においてメッセージ保持部A101は、64ビットデータA1_W00−W01を保持する。
以下、T029〜T041まで、DMAC203はメモリ202からハッシュ処理装置100へブロックA1のDMA転送を行う。この間、ハッシュ処理制御部113は、DMAC203がDMAリードアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113はT041までにDMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認し、T042においてDMAリードリクエスト信号122をデアサートする。そしてT042において、メッセージ保持部A101はブロックA1を保持する。また、DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタA137はカウントアップし、カウンタ値BCAは2になる。
また、T029〜T105まで、ハッシュ処理回路100は、SHA−1のステップ2〜79の処理を行う。この間、ステップカウンタA138はカウント値SCAを“3”から“80”までカウントアップする。その結果、T106において内部状態変数値保持部A106は、SHA−1のステップ79の処理結果である内部状態変数値SA0_79を保持する。
T105までに所定の80ステップまでカウントした為、T106においてステップカウンタA138はカウンタ値SCAをクリアし、SCAは“0”となる。
同じくT106においてハッシュ処理制御部113は、
・入力データアトリビュート信号139の部分信号である処理継続信号が“内部状態変数値の初期値を用いる”ことを示す0となっていること。並びに、
・T105のステップカウンタA138のカウント値SCAが“80”であること。
に応じて、ハッシュ初期値選択信号Y128をアサートする。
同じくT106においてセレクタ108は、ハッシュ初期値選択信号Y128のアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119のうち、ハッシュ初期値126を出力する。
同じくT106において加算処理部107は、内部状態変数値134(SA0_79)とハッシュ初期値126を入力して、ハッシュ中間値HA0を求める。
同じくT106においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、ハッシュ中間値Aロード信号129をアサートする。またハッシュ処理制御部113は、ブロックAロード信号124をアサートする。
ハッシュ中間値保持部A109はハッシュ中間値Aロード信号129のアサートを検知し、T107においてハッシュ中間値HA0を保持する。同じくT107において、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別子信号が“メッセージA”を示す“1”となっているので、メッセージA選択信号131をアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA0)をハッシュ値出力部114へ出力する。
拡張メッセージ保持部A102はブロックAロード信号124のアサートを検知し、同じくT107において、メッセージ保持部A101が保持するブロックA1を読み込む。このとき、拡張メッセージ保持部A102は、ブロックA1を16個の32ビットデータEA1_W00〜EA1_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部A101が保持していたデータを拡張メッセージ保持部A102が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT107において、ハッシュ処理制御部113は、ブロックA0のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Y128をデアサートする。
同じくT107において、ブロックAロード信号124のアサートを受けて、ステップカウンタA138はカウントアップを開始し、カウンタ値SCAは“1”となる。
同じくT107においてメッセージ拡張処理部103は、拡張メッセージ保持部A102が保持する拡張メッセージ133(EA1_W00〜EA1_W15)を入力して、32ビットデータEA1_W16を求める。
ブロックA1の処理であるため、T107においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートしない。
同じくT107においてセレクタ112は、ハッシュ初期値信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ中間値119(HA0)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HA0)を出力する。
同じくT107においてセレクタ144は、メッセージA選択信号Y145のアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージA149を拡張メッセージ133とする。そして、この拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくステップ107においてステップ処理部104は、セレクタ144を介して拡張メッセージ保持部A102が保持するEA1_W00とハッシュ中間値119(HA0)を入力する。そして、SHA−1のステップ0の処理をして内部状態変数値SA1_00を求める。
以下、T027〜T041におけるブロックA1のDMA転送と同様に、T108〜T122において、ブロックA2のDMA転送を行う。T123においてハッシュ処理制御部113は、ブロックA1に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタA137をカウントアップし、カウンタ値BCAは3となる。また、T027〜T105におけるブロックA0に対するSHA−1のステップ1〜79の処理と同様に、T108〜T186において、ブロックA1に対するSHA−1のステップ1〜79の処理を行う。この間ステップカウンタA138はカウンタ値SCAを“2”から“80”までカウントアップする。その結果、T187において内部状態変数値A保持部106は、SHA−1のステップ79の処理結果である内部状態変数値SA1_79を保持する。
同じくT187において、ブロックA1の処理であるため、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT187においてセレクタ108は、ハッシュ初期値選択信号Y126のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HA0)のうち、ハッシュ中間値119(HA0)を出力する。
同じくT187において加算処理部107は、内部状態変数値134(SA1_79)とハッシュ中間値119(HA0)を入力して、ハッシュ中間値HA1を求める。
同じくT187においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、ハッシュ中間値Aロード信号129をアサートする。ハッシュ中間値保持部A109は、T188においてハッシュ中間値Aロード信号129のアサートを検知し、ハッシュ中間値HA1を保持する。ここで、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、メッセージA選択信号131をアサートする。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA1)をハッシュ出力部114へ出力する。
以下、
・レジスタ116の入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっていること。
・レジスタ116のメッセージAの『ブロック数』領域が“96ブロック分処理する”ことを示していること。
に応じて、CPU201の制御のもとDMAC203が転送すべきデータをメッセージAからメッセージBに切替えるまで、ハッシュ処理回路100は、メッセージAのブロックA3からブロックA52までをDMAC203より受信する。そして、ブロックごとにハッシュ処理を行う。
(メッセージの切り替え)
次に、図30のメッセージAからメッセージBに切替わる際の動作について説明する。
T4237において加算処理部107は、内部状態変数値SA51_79とハッシュ中間値HA50を入力して加算処理をし、ハッシュ中間値HA51を出力する。そしてT4238において、ハッシュ中間値保持部A109がハッシュ中間値HA51を保持する。
T4237において、ハッシュ処理制御部113がブロックAロード信号124をアサートする。拡張メッセージ保持部A102はブロックAロード信号124のアサートを検知し、T4238において、メッセージ保持部A101が保持するブロックA52を読み込む。
ここでブロックA52の転送終了後にメモリ202からハッシュ処理回路100にメッセージBの転送を開始するように、CPU201がDMAC203を制御したとする。T4238においてハッシュ処理制御部113は、メッセージ保持部A101が保持していたブロックA52のデータを拡張メッセージ保持部A102が保持したことを受けて、DMAリードリクエスト信号122をアサートする。これにより、次のブロックのデータをリードするためである。このとき、拡張メッセージ保持部A102は、ブロックA52を16個の32ビットデータEA52_W00〜EA52_W15に分割して保持する。ハッシュ処理回路100はT4238からT4255までメッセージAのブロックA52に対するステップ0からステップ17の処理を行う。
一方、T4239からT4253においてDMAC203は、DMAデータリードアクノレッジ信号123を返すと同時に、メモリ202からブロックB0をハッシュ処理回路100に転送する。ブロックB0の読み込みと同時に、ハッシュ処理制御部113は、“メッセージBである”こと、“内部状態変数値の初期値を用いる”ことを識別する。さらに、レジスタ116の『メッセージ優先度』領域の情報によりメッセージBが“高優先”であることを検知する。そして、T4255まで処理していたメッセージAのブロック52に対するステップ処理を中断して、高優先のメッセージBのハッシュ処理を先に行うべきことを判断する。入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“0”であることより、その反転信号のメッセージB識別信号148が“1”となり、T4254においてメッセージ保持部B141が、ブロックB0を保持する。また、ブロックカウンタB140はカウンタ値をBCBとすると、メッセージBのブロックB0に対応するカウンタ値BCBを“1”にカウントアップする。ブロックカウンタA137はメッセージAのブロックA52に対応するカウンタ値BCAとして“53”を保持する。
T4255においてハッシュ処理制御部113は、メッセージ保持部B141に保持したメッセージBのブロックB0のデータを拡張メッセージ保持部B146にロードするために、ブロックBロード信号142をアサートする。
T4256において内部状態変数保持部A106は、メッセージAのブロック52に対するSHA−1のステップ17の処理結果である内部状態変数値SA52_17を保持する。
同じくT4256において、ステップカウンタA138は、カウンタ値SCAとしてT4255においてカウントアップしたステップ17に対応する“18”を保持する。
T4256において拡張メッセージ保持部B146は、ブロックBロード信号142のアサートを受けて、メッセージ保持部B141に保持されたブロックB0を読み込む。このとき、拡張メッセージ保持部B146は、ブロックB0を16個の32ビットデータEB0_W00〜EB0_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部B141が保持していたデータを拡張メッセージ保持部B146が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4256において、ブロックBロード信号142のアサートを受けて、ステップカウンタB157はカウントアップを開始し、カウンタ値SCBは1となる。
同じくT4256においてハッシュ処理制御部113は、メッセージ拡張処理部103の処理する対象をメッセージAからメッセージBに切替える為に、メッセージA選択信号Yをデアサートする。
同じくT4256においてセレクタ144は、メッセージA選択信号Y145のデアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージB150を拡張メッセージ133とする。そして、この拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくT4256においてメッセージ拡張処理部103は、セレクタ144を介して拡張メッセージ保持部B146が保持する拡張メッセージ133(EB0_W00〜EB0_W15)を入力して、32ビットデータEB0_W16を求める。
ブロックB0の処理であるため、T4256においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートする。
同じくT4256においてセレクタ112は、ハッシュ初期値選択信号X127のアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ初期値126を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ初期値126を出力する。
同じくT4256においてステップ処理部104は、セレクタ144を介して拡張メッセージ保持部B146が保持するEB0_W00とハッシュ初期値126を入力し、SHA−1のステップ0の処理をして内部状態変数値SB0_00を求める。
以下、T4257〜T4271において、DMAC203はブロックB1のDMA転送を行う。T4272においてハッシュ処理制御部113は、ブロックA1に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタB140をカウントアップし、カウンタ値BCBは2となる。また、T4257〜T4335において、ハッシュ処理回路100はブロックB0に対するSHA−1のステップ1〜79の処理を行う。この間ステップカウンタB157はカウンタ値SCBを2から80までカウントアップする。その結果、T4336において内部状態変数値保持部B151は、SHA−1のステップ79の処理結果である内部状態変数値SB0_79を保持する。
また、入力データアトリビュート信号139の部分信号である処理継続信号が“内部状態変数値の初期値を用いる”ことを示す“0”となっており、かつ、ブロックB0の処理である。このため、同じくT4336において、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートする。
同じくT4336においてセレクタ108は、ハッシュ初期値選択信号Y128のアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HA51)のうち、ハッシュ初期値126を出力する。
同じくT4336において加算処理部107は、内部状態変数値134(SB0_79)とハッシュ初期値126を入力して、ハッシュ中間値HB0を求める。
同じくT4336においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、ハッシュ中間値Bロード信号130をアサートする。またハッシュ処理制御部113は、ブロックBロード信号142をアサートする。
ハッシュ中間値保持部B110はハッシュ中間値Bロード信号130のアサートを検知し、T4337においてハッシュ中間値HB0を保持する。同じくT4337において、入力データアトリビュート信号139の部分信号であるメッセージA識別子信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、ハッシュ処理制御部113は、メッセージA選択信号X131をデアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB0)をハッシュ値出力部114へ出力する。
拡張メッセージ保持部B146はブロックBロード信号142のアサートを検知し、同じくT4337において、メッセージ保持部B141が保持するブロックB1を読み込む。このとき、拡張メッセージ保持部B146は、ブロックB1を16個の32ビットデータEB1_W00〜EB1_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部B141が保持していたデータを拡張メッセージ保持部B146が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4337において、ハッシュ処理制御部113は、ブロックB0のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Y128をデアサートする。
同じくT4337において、ブロックBロード信号142のアサートを受けて、ステップカウンタB157はカウントアップを開始し、カウンタ値SCBは1となる。
同じくT4337においてセレクタ144は、メッセージA選択信号Y145のデアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージB150を拡張メッセージ133とする。そして、この拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくT4337においてメッセージ拡張処理部103は、セレクタ144を介して拡張メッセージ保持部B146が保持する拡張メッセージ133(EB1_W00〜EB1_W15)を入力して、32ビットデータEB1_W16を求める。
ブロックB1の処理であるため、T4337においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートしない。
同じくT4337においてセレクタ112は、ハッシュ初期値信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ中間値119(HB0)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HB0)を出力する。
以下、T4338〜T4352において、DMAC203はブロックB2のDMA転送を行う。T4353においてハッシュ処理制御部113は、ブロックB2に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタB140をカウントアップし、カウンタ値BCBは3となる。また、T4257〜T4335におけるブロックB0に対するSHA−1のステップ1〜79の処理と同様に、T4338〜T4416において、ハッシュ処理回路100はブロックB1に対するSHA−1のステップ1〜79の処理を行う。この間ステップカウンタB157はカウンタ値SCBを“2”から“80”までカウントアップする。その結果、T4417において内部状態変数値保持部B151は、SHA−1のステップ79の処理結果である内部状態変数値SB1_79を保持する。
同じくT4417において、ブロックB1の処理であるため、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT4417においてセレクタ108は、ハッシュ初期値選択信号Y126のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HB0)のうち、ハッシュ中間値119(HB0)を出力する。
同じくT4417において加算処理部107は、内部状態変数値134(SB1_79)とハッシュ中間値119(HB0)を入力して、ハッシュ中間値HB1を求める。
同じくT4417においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、ハッシュ中間値Bロード信号130をアサートする。ハッシュ中間値保持部B110は、T4418においてハッシュ中間値Bロード信号130のアサートを検知し、ハッシュ中間値HB1を保持する。ここで、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、メッセージA選択信号131をデアサートする。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB1)をハッシュ出力部114へ出力する。
以下、
・レジスタ116の入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっていること。
・レジスタ116のメッセージBの『ブロック数』領域が“4ブロック分処理する”ことを示していること。
を受けて、ハッシュ処理回路100はブロックB2からB3までメッセージBのブロックをDMACより受信し、ブロックごとにハッシュ処理を行う。
以下、図31のメッセージBからメッセージAに切替わる部分の説明を行う。
T4498において加算処理部107は、内部状態変数値134(SB02_79)とハッシュ中間値HB1を入力して加算処理をし、ハッシュ中間値HB2を出力する。
同じくT4498においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、ハッシュ中間値Bロード信号130をアサートする。また、ハッシュ処理制御部113がブロックBロード信号142をアサートする。
ハッシュ中間値保持部B110はハッシュ中間値Bロード信号130のアサートを検知し、T4499においてハッシュ中間値HB2を保持する。同じくT4499において、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別子信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、メッセージB選択信号131をアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB2)をハッシュ値出力部114へ出力する。
拡張メッセージ保持部B146はブロックBロード信号142のアサートを検知し、T4499において、メッセージ保持部B141が保持するブロックB03を読み込む。このとき、拡張メッセージ保持部B146は、ブロックB03を16個の32ビットデータEB3_W00〜EB3_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部B141が保持していたデータを拡張メッセージ保持部B146が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
ここで、ブロックB3の転送終了後にメモリ202からハッシュ処理回路100に対してメッセージAの残りのデータ転送を再開するように、CPU201がDMAC203を制御したとする。
T4500からT4514においてDMAC203は、DMAデータリードアクノレッジ信号123を返すと同時に、メモリ202からブロックA53をハッシュ処理回路100に転送する。ブロックA53の読み込みと同時に、ハッシュ処理制御部113は、“メッセージAである”こと、“ハッシュ中間値を用いる”ことを識別する。さらに、
・レジスタ116の『メッセージ優先度』領域の情報によりメッセージAが“低優先”であること。
・ブロックカウンタA137のカウンタ値BCAが“53”であること。
・ステップカウンタA138のカウンタ値SCAが“18”であること。
を検知する。そして、メッセージAのブロック52に関してステップ17まで処理したところで中断しており、メッセージAのブロック52に対するステップ18から処理を継続すべきことを判断する。
T4515においてハッシュ処理制御部113は、ブロックA53に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“1”であることより、T4515においてメッセージ保持部A101が、ブロックA53を保持する。また、DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタA137は、メッセージAのブロックA53に対応するカウンタ値BCBを“54”にカウントアップする。
一方、T4499からT4578において、ハッシュ処理回路100はメッセージBのブロックB03に対するSHA−1のステップ0からステップ79の処理を行う。この間ステップカウンタB157はカウンタ値SCBを2から80までカウントアップする。その結果、T4579において内部状態変数値B保持部151は、SHA−1のステップ79の処理結果である内部状態変数値SB3_79を保持する。
同じくT4579において、ブロックB3の処理であるため、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT4579においてセレクタ108は、ハッシュ初期値選択信号Y128のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HB2)のうち、ハッシュ中間値119(HB2)を出力する。
同じくT4579において加算処理部107は、内部状態変数値134(SB3_79)とハッシュ中間値119(HB2)を入力して、ハッシュ中間値HB3を求める。
同じくT4579においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、ハッシュ中間値Bロード信号130をアサートする。
ハッシュ中間値保持部B110はハッシュ中間値Bロード信号130のアサートを検知し、T4580においてハッシュ中間値HB3を保持する。同じくT4580において、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別子信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、メッセージB選択信号131をアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB3)をハッシュ値出力部114へ出力する。メッセージBは図5に示すようにブロックB0〜B3で構成されるので、ハッシュ中間値HB3はメッセージBのハッシュ値HBとなる。
ここで、レジスタ116のメッセージBに関する『ブロック数』領域が保持する“4ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、T4580においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“内部状態変数値の初期値を用いる”フラグをクリアする。また、ハッシュ処理制御部113は、T4580においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HBをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMA203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。T4586においてハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
そして、DMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HBの格納を通知する。
一方、T4579において、ハッシュ処理制御部113はメッセージAに対するステップ処理を再開するために、メッセージA選択信号Y145をアサートする。ステップカウンタB157はカウンタ値SCBをステップ18に対応する“19”にカウンタアップする。
同じくT4579においてセレクタ144は、メッセージA選択信号Y145のアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージA149を拡張メッセージ133とする。そしてこの拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくT4579においてメッセージ拡張処理部103は、セレクタ144を介して拡張メッセージ保持部A102が保持する拡張メッセージ133(EA52_W18〜EA52_W33)を入力して、32ビットデータEA52_W34を求める。
以降、T4580からT4640において、ハッシュ処理回路100はブロックA52に対するSHA−1のステップ19〜79の処理を行う。
この間、ステップカウンタA138はカウント値SCAを“20”から“80”までカウントアップする。その結果、T4641において内部状態変数値保持部A106は、ブロックA52に対するSHA−1のステップ79の処理結果である内部状態変数値SA52_79を保持する。
ブロックA52の処理であるため、T4641においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートしない。
同じくT4641においてセレクタ112は、ハッシュ初期値信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ中間値119(HA51)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HA51)を出力する。
また、入力データアトリビュート信号139の部分信号である処理継続信号が“ハッシュ中間値を用いる”ことを示す“1”となっており、かつ、ブロックA52の処理である。このため、同じくT4641において、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT4641においてセレクタ108は、ハッシュ初期値選択信号Y128のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HA51)のうち、ハッシュ中間値119を出力する。
同じくT4641において加算処理部107は、内部状態変数値134(SA52_79)とハッシュ中間値119(HA51)を入力して、ハッシュ中間値HA52を求める。
同じくT4641においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、ハッシュ中間値Aロード信号129をアサートする。またハッシュ処理制御部113は、ブロックAロード信号124をアサートする。
ハッシュ中間値保持部A109はハッシュ中間値Aロード信号129のアサートを検知し、T4642においてハッシュ中間値HA52を保持する。同じくT4642において、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別子信号146が“メッセージA”を示す“1”となっているので、メッセージA選択信号X131をアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA52)をハッシュ値出力部114へ出力する。
拡張メッセージ保持部A102はブロックAロード信号124のアサートを検知し、同じくT4642において、メッセージ保持部A101が保持するブロックA53を読み込む。このとき、拡張メッセージ保持部A102は、ブロックA53を16個の32ビットデータEA53_W00〜EA53_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部A101が保持していたデータを拡張メッセージ保持部A102が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4642において、ハッシュ処理制御部113は、ブロックA52のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Y128をデアサートする。
同じくT4642において、ブロックAロード信号124のアサートを受けて、ステップカウンタA138はカウントアップを開始し、カウンタ値SCAは1となる。
同じくT4642においてセレクタ144は、メッセージA選択信号Y145のアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージA149を拡張メッセージ133とする。そして、この拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくT4642においてメッセージ拡張処理部103は、セレクタ144を介して拡張メッセージ保持部A102が保持する拡張メッセージ133(EA53_W00〜EA53_W15)を入力して、32ビットデータEA53_W16を求める。
ブロックB1の処理であるため、T4337においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートしない。
同じくT4642においてセレクタ112は、ハッシュ初期値信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ中間値119(HA52)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HA52)を出力する。
以下、T4643〜T4657において、DMAC203はブロックA54のDMA転送を行う。T4658においてハッシュ処理制御部113は、ブロックA54に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタA137をカウントアップし、カウンタ値BCAは“55”となる。また、T4643〜T4721において、ブロックA53に対するSHA−1のステップ1〜79の処理を行う。この間ステップカウンタA138はカウンタ値SCAを“2”から“80”までカウントアップする。その結果、T4722において内部状態変数値A保持部106は、ブロックA53に対するSHA−1のステップ79の処理結果である内部状態変数値SA53_79を保持する。
同じくT4722において、ブロックA53の処理であるため、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT4722においてセレクタ108は、ハッシュ初期値選択信号Y126のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HA52)のうち、ハッシュ中間値119(HA52)を出力する。
同じくT4722において加算処理部107は、内部状態変数値134(SA53_79)とハッシュ中間値119(HA52)を入力して、ハッシュ中間値HA53を求める。
同じくT4722においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、ハッシュ中間値Aロード信号129をアサートする。ハッシュ中間値保持部A109は、T4723においてハッシュ中間値Aロード信号129のアサートを検知し、ハッシュ中間値HA53を保持する。ここで、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、メッセージA選択信号131をアサートする。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA53)をハッシュ出力部114へ出力する。
以降、
・レジスタ116の入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっていること。
・レジスタ116のメッセージBの『ブロック数』領域が“96ブロック分処理する”こと。
を示しているのを受けて、ハッシュ処理回路100はメッセージAのブロックA55からブロックA95までをDMAC203より受信し、ブロックごとにハッシュ処理を行う。
(ブロック単位の動作)
図32Aと図32B(以下、まとめて図32)は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。なお、TBXXXは基本的にブロック処理の単位となっている期間Tの81個分の期間を表している。先述のT026〜T106はTB0にあたり、T107〜T187はTB1にあたる。但し、TB52はメッセージAのブロック52に対してステップ0〜17の処理の後、メッセージBのブロックB0に対してステップ0〜ステップ79の処理を行っているため、T4238〜T4336の99個分の期間となる。また、TB56はメッセージAのブロック52に対してステップ19〜79の処理を行っているため(ステップ18の処理期間はTB55内に隠蔽)、T4580〜T4641の62個分の期間となる。また、入力メッセージA0_W00〜W15はA0(t)、拡張メッセージEA0_W00〜EA_W79はEA0(t)、内部状態変数値SA0_00〜SA0_79はSA0(t)とあらわしている。ここで、tはステップ数を示し、XX(t)はステップ数tにより値が変化することを示す。
以下、ブロック処理期間毎の各部の動作を説明する。尚、一部ステップ処理期間毎の詳細動作も説明する。
前述したように、TB0においてDMAC203が、メモリ202からハッシュ処理回路100にブロックA1をDMA転送する。ブロックA1のDMA転送終了後、ブロックカウンタA137はカウントアップし、カウンタ値BCAは2となる。TB1においてDMAC203が、メモリ202からハッシュ処理回路100にブロックA2をDMA転送する。ブロックA2のDMA転送終了後、ブロックカウンタA137はカウントアップし、カウンタ値BCAは3となる。
また、前述したように、ハッシュ処理回路100は、TB0においてメッセージAの先頭ブロックであるブロックA0を入力して拡張メッセージEA0(t)を求めると共に内部状態変数値SA0(t)を求める。SA(t)を更新するステップ処理においてはステップt毎にt番目の拡張メッセージと(t−1)番目の内部状態変数値を用いて内部状態変数値を更新し、ステップ79で内部状態変数値SA0_79を求める。そして最終的にハッシュ初期値と加算してハッシュ中間値HA0を求める。TB1において、ハッシュ中間値保持部A109はハッシュ中間値HA0を保持する。そして、ハッシュ処理回路100はブロックA1を入力して拡張メッセージEA1(t)と内部状態変数値SA1(t)を求め、ステップ79で内部状態変数値SA1_79を求める。そして最終的に内部状態変数値SA1_79とハッシュ中間値HA0を加算して、ハッシュ中間値HA1を求める。
以下、TB2〜TB51においてDMAC203は、ブロックA3〜A52をメモリ202からハッシュ処理回路100にDMA転送する。このとき、ブロックカウンタA137のカウンタ値BCAは4〜53までカウントアップする。また、TB2〜TB51においてハッシュ処理回路100は、ブロックA2〜A51のハッシュ処理をする。
前述したように、TB52において、DMAC203はブロックB0をメモリ202からハッシュ処理回路100にDMA転送する。同じくTB52において、ハッシュ処理回路はブロックA52に対してステップ0〜17の処理をした後、
・1つ前のハッシュ中間値HA52。
・ステップ処理の途中結果である内部状態変数値SA52_17。
・メッセージAに対する処理ブロックのカウンタ値BCA“52”。
・処理ステップのカウンタ値SCA“17”。
を保持して中断し、ブロックB0のハッシュ処理を行う。同じくTB52において、DMAC203はブロックB1をメモリ202からハッシュ処理回路100にDMA転送する。
TB53〜TB54において、DMAC203はブロックB2〜B3をメモリ202からハッシュ処理回路100にDMA転送する。同じくTB53〜54において、ハッシュ処理回路100はブロックB2〜B3のハッシュ処理を行う。
TB55において、DMAC203はブロックA53をメモリ202からハッシュ処理回路100にDMA転送する。同じくTB55において、ハッシュ処理回路100はブロックB3のハッシュ処理を行う。
メッセージBのメッセージ長は4のため、ハッシュ中間値HB3はメッセージBのハッシュ値HBとなる。TB56において、DMAC203はハッシュ値HBをハッシュ処理回路100からメモリ202にDMA転送する。
同じくTB56においてハッシュ処理回路100は、TB52において中断したメッセージAのブロックA52に対して途中結果の内部状態変数値SA52_17、ハッシュ中間値HA51を用いて、ステップ18の処理から再開する。以降、ステップ19〜79の処理を行う。
TB57において、DMAC203はブロックA54をメモリ202からハッシュ処理回路100にDMA転送する。同じくTB57において、ハッシュ処理回路100はブロックA53のハッシュ処理を行う。
以降、DMAC203は、TB58〜TB98においてブロックA55〜A95をメモリ202からハッシュ処理回路100にDMA転送する。このとき、ブロックカウンタA137はカウンタ値BCAを55〜96までカウントアップする。また、ハッシュ処理回路100は、TB58〜TB99においてブロックA54〜A95に対するハッシュ処理を行う。この間、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているのでハッシュ値Bロード信号130をアサートせず、ハッシュ値Aロード信号129を適宜アサートする。そのため、ハッシュ中間値保持部B110はメッセージAのハッシュ中間値を保持せず、ハッシュ中間値保持部A109がメッセージAのハッシュ中間値を保持する。また、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているのでメッセージ選択信号A131をアサートしている。そのため、セレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力を出力する。その他の処理は他のブロックに対する処理と同様である。
この結果、TB100においてハッシュ中間値保持部A109は、メッセージAのブロックA0〜ブロックA95に対するハッシュ中間値HA95を保持する。メッセージAは図5に示すようにブロックA0〜A95で構成されるので、ハッシュ中間値HA95はメッセージAのハッシュ値HAとなる。TB100においてハッシュ処理制御部113はメッセージA選択信号131をアサートしている。そのためセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部A109の出力(HA)をハッシュ値出力部114へ出力する。
ここで、レジスタ116の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージAを処理する”および“96ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB100においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“ハッシュ中間値を用いる”フラグをクリアする。また、ハッシュ処理制御部113は、TB100においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HAをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB100においてDMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HAの格納を通知する。
同じくTB100において、CPU201はDMAC203からの割込みによって“メッセージA”を“96ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。
また、本実施形態においては、メッセージBのメッセージ優先度は高優先としたが、これに限られない。例えば、メッセージBのメッセージ優先度がメッセージAと同様に低優先の場合は、ハッシュ処理回路100はブロックA52に対するハッシュ処理を途中で中断せずに、ブロックA52のハッシュ中間値を生成後に、ブロックB0に対するハッシュ処理を行う。
以上説明したように、本実施形態においては、メッセージ識別子、処理継続の情報をメッセージのデータに付帯する入力データアトリビュート信号から抽出して識別する。そして、各メッセージに対するハッシュ処理回路のステップ処理のステップの区切りの処理結果である内部状態変数値とそのステップ数、ブロック処理の区切りの処理結果であるハッシュ中間値を保持する。このようにして、2種類のメッセージに対してメッセージ、ハッシュ中間値、内部状態変数値を切替えてハッシュ処理を行う。
従来の構成では、第一のメッセージに対するハッシュ処理を途中で中断して、別の第二のメッセージに対するハッシュ処理を先に行う場合、ハッシュ中間値を外部のメモリに一旦書き出して、再び読込んでいた。ここで、第一のメッセージの処理途中結果のハッシュ中間値あるいは内部状態変数値を外部メモリに書き出すのに本実施形態の構成を仮定する。すると、この場合、第一のメッセージから第二のメッセージに対して切替える時に、12基本処理期間、その他、レジスタ設定等に更に2基本処理期間オーバーヘッドを要する。
同様に、第二のメッセージのハッシュ処理完了後に、第一のメッセージのハッシュ処理を再開するにも、処理途中結果のハッシュ中間値あるいは内部状態変数値を外部メモリから読み出すのに12基本処理期間要する。その他、レジスタ設定等に更に2基本処理期間のオーバーヘッドを要する。合わせて、少なくとも、28基本処理期間のオーバーヘッドを要する。
従って、本実施形態は、第一のメッセージに対するハッシュ処理を途中で中断して、別の第二のメッセージに対するハッシュ処理を先に行う場合、従来の構成に比して、少なくとも28基本処理期間分、ハッシュ処理期間を短縮可能な構成である。実際には、本実施形態においては、ハッシュ処理をおこなっている間に次に処理すべきメッセージのブロックのデータをメモリからDMA転送している。従来の構成がメッセージのデータ転送期間をハッシュ処理期間に吸収する構成を取っていない場合は、更に、512ビットのブロックのデータのDMA転送期間とレジスタ設定期間の16+2=18基本処理期間分、本実施形態の方が処理期間を短縮している。
また、従来はステップ処理の区切りでの中断に対応していない。このため、第一のメッセージ処理を中断して、第二のメッセージの処理を先に行う場合、第一のメッセージのブロック処理の区切りまで待つか、あるいは、当該処理中のブロックに対する当該ステップまでのステップ処理の結果を破棄する必要があった。上記いずれの場合でも、第一のメッセージのあるブロックに対するステップ0〜79のどのステップの時点で切り替えるかにより、処理時間を短縮できる。すなわち、本実施形態は従来例に比して、さらに0〜79の基本処理期間分、第二のメッセージ開始時期および完了時期あるいは第一のメッセージの処理完了時期を早くすることができる。
このように、本実施形態によれば、ハッシュ中間値を外部のメモリに一旦書き出して、再び読込んでいた従来例に比較して、処理時間を大幅に短縮できる。外部メモリとのハッシュ中間値の送受信のために要していたオーバーヘッド分が軽減され、所定の応答時間を保証することが可能な、効率的なハッシュ処理を実現することができる。
また、本実施形態においては、メッセージの1ブロック分をハッシュ処理回路内に保持することにより、外部メモリからメッセージの各ブロックデータを転送するのに必要なオーバーヘッド時間を隠蔽し、より効率的なハッシュ処理を実現することができる。
なお、本実施形態においては、1つ前のブロックに対するハッシュ処理を完了した時点で、上記回路内に保持した1ブロック分のデータを拡張処理部にロードし、その後に、外部メモリから次の1ブロック分のデータ転送を要求している。ここで、当該ロードしたブロック分に対するハッシュ処理が完了するまで保持部で保持して、その後、次の1ブロック分のデータの転送要求をするようにしてもよい。この場合、当該ブロックに対するハッシュ処理を途中で破棄した場合も、当該ブロックのデータが回路内に保持されているので、外部メモリから再度読込むオーバーヘッドを削減することができる。
また、本実施形態においては、ハッシュ関数としてはSHA−1を用いたが、ハッシュ関数はMD5、SHA−256等、他のアルゴリズムであってもよいことは言うまでもない。
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成する構成としても構わない。
また、本実施形態においては、2種類のメッセージに対するハッシュ中間値を保持可能な構成としたが、これに限られない。例えば、3以上のハッシュ中間値保持部、内部状態変数値保持部、ブロックカウンタ、レジスタ設定領域等を設けることにより、3種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。
また、本実施形態においては、1つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたが、これに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を1つあるいは複数備える構成としてもよい。内部状態変数値保持部に関しても同様である。
また、本実施形態においては、メッセージA、Bのハッシュ中間値をそれぞれハッシュ中間値保持部A、Bに保持するというように、各メッセージのハッシュ中間値とハッシュ中間値保持部の対応は固定的であるものとしたが、これに限られない。例えば、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持するハッシュ中間値保持情報保持部を設け、当該ハッシュ中間値保持情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定してもよい。内部状態変数値保持部に関しても同様である。
また、本実施形態においては、メッセージ優先度は高優先、低優先の2段階としたが、メッセージ優先度は3段階以上にして、より優先度の高いメッセージの処理を優先的にハッシュ処理するような構成にしてもよい。
また、本実施形態においては、第一、第二のメッセージを各々第一、第二のメッセージ保持部に保持する構成としたが、これに限られない。例えば、優先度の段階数、ハッシュ中間値保持部の数に応じて、所定数のメッセージ保持部あるいは所定数のメッセージ保持領域を設けて、当該所定数以下のメッセージを保持可能な構成としてもよい。例えば、3つのメッセージ保持領域(P、Q、R)を設け、A、B、C、D,Eの5つのメッセージに対してハッシュ処理を行う場合を考える。この場合、メッセージの入力状況と、メッセージ保持領域の空き状況に応じて、PにA,QにB、RにE、A処理完了後に空いたPにD、E処理完了後に空いたRにCを使用するようにしてもよい。
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、CPUが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてDMACを用いたが、他の転送手段を用いてもよい。
また、本実施形態においては、DMA入出力データは64ビットであるとしたが、他のビット数であってもよいことは言うまでもない。
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、DMA転送処理の基本処理期間Tは同一としたが、ステップ処理とDMA転送処理の基本処理期間は異なっていても構わない。
また、本実施形態においては、メッセージ優先度は予め処理要求の情報としてCPUがレジスタの所定領域に設定するものとしたが、入力データアトリビュート信号にメッセージ優先度を含めてもよい。
また、本実施形態においては、入力データアトリビュート信号にはメッセージ識別、処理継続の情報を含むものとし、データ幅は8ビットであるとしたが、これに限られない。例えば、入力データアトリビュート情報としては他のメッセージ優先度、ブロック識別子等の情報を含んでもよく、情報に応じて信号のデータ幅が変わってもよい。
また、本実施形態においては、ハッシュ処理回路が入力メッセージのブロック番号をメッセージ毎の入力ブロック数をカウントして識別するものとしたが、入力データアトリビュート信号としてブロック番号が付帯している構成としてもよい。
また、本実施形態では、CPUがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はメッセージ毎にDMAアクノレッジ信号をカウントすることにより、CPUが設定したブロック数のメッセージの供給を認識するものとした。しかし、これに限られず、例えば、メッセージの転送完了をCPUからレジスタ設定で通知する等他の方法を用いてもよい。
また、本実施形態においては、レジスタの所定領域が保持するメッセージ優先度の情報により、低優先のメッセージのブロックに対するハッシュ処理を途中で中断するようにしたが、これに限られない。例えば、アトリビュート信号に含まれるメッセージ識別子にメッセージ優先度の意味を兼ねさせる、あるいは、他の処理中断指示信号を入力することにより高優先のメッセージを優先して処理中のメッセージに対するハッシュ処理の中断を判断してもよい。
また、本実施形態では、ハッシュ処理対象のメッセージとしてメッセージAとメッセージBに関して最初にレジスタ設定してそれ以降入力メッセージに応じてメッセージAあるいはメッセージBに対するハッシュ処理を行うものとしたが、これに限られない。例えば、上記メッセージAあるいはメッセージBに対するハッシュ処理の途中でメッセージCに対するハッシュ処理を開始する必要が生じたとする。この場合、メッセージCに対するハッシュ処理要求のレジスタ設定を途中で追加すれば、以降、入力メッセージに応じてメッセージA、メッセージB、メッセージCに対するハッシュ処理を行うことができる。
なお、本発明の実施形態は上記に限定されるものでなく、種々に変更可能である。
上記のように、本実施形態ではハッシュ中間値保持部と内部状態変数値保持部とステップ数保持部とを複数設け、複数のメッセージを処理して得られた各々のハッシュ中間値、内部状態変数値、ステップ数の一時保持領域として使っている。これにより、ハッシュ処理の対象となるメッセージの切替え時の時間的オーバーヘッドを軽減することができる。
<<実施形態5>>
本実施形態ではハッシュ・アルゴリズムとしてMD5、SHA1、SHA512に対応し、最大2つのメッセージを並列に処理するハッシュ処理処置を説明する。並列に行う2つの処理を以下、処理A、処理Bと呼ぶ。
ハッシュ処理は、メッセージを16ワードのブロック単位で処理し、ハッシュ処理の最終結果としてNワードのハッシュ値を出力する。ハッシュ処理は下記の一連の処理から構成される。
・メッセージを16ワードのブロックに区切り、最後のブロックも16ワードになるように、メッセージの最後尾に所定のデータを付け加える。(以下、パディング処理と呼ぶ。)
・16ワードのブロック毎に、後述するメッセージ拡張処理と、ステップ処理と、加算処理を行い、ハッシュ中間値を生成する。
メッセージ拡張処理は、16ワードのデータを使って、1ワードの拡張メッセージを生成する演算処理である。最初に入力したメッセージは、そのまま1番目から16番目の拡張メッセージとなる。17番目以降の拡張メッセージに関しては、(n−16)から(n−1)番目の16ワードの拡張メッセージを使ってn番目の拡張メッセージ1ワードを生成する。これを繰り返しN番目の拡張メッセージまで生成する。Nはアルゴリズムで既定されている所定のステップ数とする。
ステップ処理は、Wワード(Wはハッシュ・アルゴリズムで既定されている整数)で構成される所定の内部状態変数値と1ワードの拡張メッセージを使って次の内部状態変数値を生成する演算処理である。。1番目の内部状態変数値の生成は、ハッシュ初期値と1番目の拡張メッセージを使って1番目の内部状態変数値を生成する。n番目の内部状態変数値の生成では、(n−1)番目の内部状態変数値とn番目の拡張メッセージを使ってn番目の内部状態変数値を生成する。これを繰り返しN番目の内部状態変数値まで生成する。
加算処理は、先頭ブロックから1つ前のブロックまでのハッシュ中間値と、当該ブロックのN番目の内部状態変数値を加算する演算処理である。最初のブロックのハッシュ中間値生成は、ハッシュ初期値と最初のブロックのN番目の内部状態変数値を加算して生成する。最終ブロックで得られるハッシュ中間値が当該メッセージ全体に対するハッシュ値となる。
1ワードを構成するビット数はハッシュ・アルゴリズム毎に既定されており、MD5は32ビット、SHA1は32ビット、SHA512は64ビットである。
内部状態変数値及びハッシュ値のワード数はハッシュ・アルリズムごとに既定されており、MD5は4ワード(128ビット)、SHA1は5ワード(160ビット)、SHA512は8ワード(256ビット)である。
所定のステップ数Nはハッシュ・アルゴリズム毎に既定されており、MD5はN=64、SHA1はN=80、SHA512はN=80である。
(ハッシュ処理回路)
図33は本実施形態に係るハッシュ処理回路の構成を示した図である。100はハッシュ処理回路である。
101は処理A、処理Bを制御するハッシュ処理制御部であり、ハッシュ処理を制御するためのレジスタを備える。レジスタは、ハッシュ処理回路100の外部に存在するCPU等からシステムバス102を介してアクセスすることが可能である。
ハッシュ処理制御部101は以下の信号を生成する。
・処理Aが実行中であることを示す信号A_EXE。
・処理Aが実行中のハッシュ・アルゴリズムを示す信号A_ALG。
・処理Aが実行中のステップ数を示す信号A_STP_CNT。
・処理Aが実行中のブロック数を示す信号A_BLK_CNT。
・処理Aが使用するハッシュ初期値を示す信号A_IV。
A_EXEは”1”のとき実行中であることを示し、A_ALGはMD5、SHA1、SHA512のいずれかを示す。A_STP_CNTは、A_EXE=”1”になったとき0に初期化し、入力メッセージの入力転送要求に対する1番目のアクノリッジを受信したときにカウントを開始する。クロック1サイクル毎に0〜N+1までカウントアップし、0に戻る。メッセージ拡張処理は、A_STP_CNTが0〜N−1のとき、1番目〜N番目の処理を行い、ステップ処理は、A_STP_CNTが1〜Nのとき、1番目〜N番目の処理を行う。加算処理はA_STP_CNTが2〜N+1のとき、1番目〜N番目の処理を行う。A_BLK_CNTはA_EXE=”1”になったとき0に初期化し、A_STP_CNTがN+1になったときに+1カウントアップする。入力するメッセージのブロック数-1までカウントアップし、0に戻る。
また、ハッシュ処理制御部101は、ハッシュ処理回路100の外部に存在する処理Aが使用する入出力データを転送するDMAコントローラ(以下DMACと呼ぶ)DMAC Aに対し、データ転送を要求する信号A_DMA_REQを生成する。そして、DMAC Aからのアクノジッリ信号A_DMA_ACKを受信する。A_DMA_REQ、A_DMA_ACKは夫々2ビットの信号である。A_DMA_REQ[0]/A_DMA_ACK[0]は被処理データである入力メッセージを入力する入力転送用、A_DMA_REQ[1]/A_DMA_ACK[1]はハッシュ処理結果として得られたハッシュ値を出力する出力転送用とする。
さらに、ハッシュ処理制御部101は以下の信号を生成する。
・処理Bが実行中であることを示す信号B_EXE。
・処理Bが実行中のハッシュ・アルゴリズムを示す信号B_ALG。
・処理Bが実行中のステップ数を示す信号B_STP_CNT。
・処理Bが実行中のブロック数を示す信号B_BLK_CNT。
・処理Bが使用するハッシュ初期値を示す信号B_IV。
B_EXEは”1”のとき実行中であることを示し、B_ALGはMD5、SHA1、SHA512のいずれかを示す。B_STP_CNTは、B_EXE=”1”になったとき0に初期化し、入力メッセージの入力転送要求に対する1番目のアクノリッジを受信したときにカウントを開始する。1サイクル毎に0〜N+1までカウントアップし、0に戻る。メッセージ拡張処理は、B_STP_CNTが0〜N−1のとき、1番目〜N番目の処理を行い、ステップ処理は、B_STP_CNTが1〜Nのとき、1番目〜N番目の処理を行う。加算処理はB_STP_CNTが2〜N+1のとき、1番目〜N番目の処理を行う。B_BLK_CNTはB_EXE=”1”になったとき0に初期化し、B_STP_CNTがN+1になったときに+1カウントアップする。入力するメッセージのブロック数-1までカウントアップし、0に戻る。
また、ハッシュ処理制御部101は、ハッシュ処理回路100の外部に存在する処理Bが使用する入出力データを転送するDMAC Bに対し、データ転送を要求する信号B_DMA_REQを生成する。そして、DMAC Bからのアクノジッリ信号B_DMA_ACKを受信する。B_DMA_REQ、B_DMA_ACKは夫々2ビットの信号である。B_DMA_REQ[0]/B_DMA_ACK[0]は被処理データである入力メッセージを入力する入力転送用、B_DMA_REQ[1]/B_DMA_ACK[1]はハッシュ処理結果として得られたハッシュ値を出力する出力転送用とする。
103はハッシュ処理回路100外部に存在するDMACとのインターフェースであるDMA IF部である。104は処理Aのデータを入出力転送するDMAC Aとのインターフェース信号である。入力データバスA_DMA_IDATAは64ビットで、被処理データである入力メッセージを64ビット単位で転送し、64ビットの入力メッセージA_MSGとして出力する。出力データバスA_DMA_ODATAは64ビットで、ハッシュ処理結果として得られたハッシュ値を64ビット単位で転送する。105は処理Bのデータを入出力転送するDMAC Bとのインターフェース信号である。入力データバスB_DMA_IDATAは64ビットで、被処理データである入力メッセージを64ビット単位で転送し、64ビットの入力メッセージB_MSGとして出力する。出力データバスB_DMA_ODATAは64ビットで、ハッシュ処理結果として得られたハッシュ値を64ビット単位で転送する。
(インタフェース信号)
図42は、インタフェース信号104,105による動作を例示するタイミングチャートである。
T100-T105に104の入力転送、T107-110に104の出力転送を示す。入力転送は、T100でDMA IF部103がDMAC Aへ入力転送要求信号A_DMA_REQ[0]をアサートする。
T101でDMAC AがDMA IF部103へ1番目の入力データDI0を転送し、アクノリッジ信号A_DMA_ACK[0]をアサートする。T102のクロックの立ち上がりでA_DMA_REQ[0]とA_DMA_ACK[0]が同時にアサートされて、DI0の入力転送は完了し、DMAC Aは2番目の入力データDI1を転送する。出力転送は、T107でDMA IF部103がDMAC Aへ1番目の出力データDO0を出力すると同時に出力転送要求信号A_DMA_REQ[1]をアサートする。T108でDMAC AがDMA IF部103へアクノリッジ信号A_DMA_ACK[1]をアサートし、出力データを受信する。
T109のクロックの立ち上がりでA_DMA_REQ[1]とA_DMA_ACK[1]がアサートされて、DO0の出力は転送は完了し、DMA IF部103は2番目の出力データDO1を転送する。本実施形態では処理Aが一度に転送要求するデータ量は決まっており、DAMC Aは一旦アクノリッジ信号をアサートすると、決められたデータ量を連続して転送する。入力転送は1回に1ワード分のデータを1ブロック分連続して転送するとする。1ワードが入力データバス幅64ビットに満たないときは下位ビットに詰めて転送する。出力転送は1ワード分のデータをハッシュ値のワード数連続して転送するとする。1ワードが入力データバス幅64ビットに満たないときは下位ビットに詰めて転送する。MD5、SHA1、SHA512は1ブロック16ワードなので16回連続して転送する。出力転送はハッシュ値を64ビット幅に区切り、連続して転送するとする。MD5のハッシュ値は128ビットなので2回、SHA1のハッシュ値は160ビットなので3回、SHA512のハッシュ値は512ビットなので8回連続して転送する。
T111-T116に105の入力転送、T118-122に105の出力転送を示す。入力転送は、T111でDMA IF部103がDMAC Bへ入力転送要求信号B_DMA_REQ[0]をアサートする。
T112でDMAC BがDMA IF部103へ1番目の入力データDI0を転送し、アクノリッジ信号B_DMA_ACK[0]をアサートする。T113のクロックの立ち上がりでB_DMA_REQ[0]とB_DMA_ACK[0]が同時にアサートされて、DI0の入力転送は完了し、DMAC Bは2番目の入力データDI1を転送する。出力転送は、T118でDMA IF部103がDMAC Bへ1番目の出力データDO0を出力すると同時に出力転送要求信号B_DMA_REQ[1]をアサートする。T119でDMAC BがDMA IF部103へアクノリッジ信号B_DMA_ACK[1]をアサートし、出力データを受信する。
T120のクロックの立ち上がりでB_DMA_REQ[1]とB_DMA_ACK[1]がアサートされて、DO0の出力転送は完了しDMA IF部103は2番目の出力データDO1を転送する。本実施形態では処理Bが一度に転送要求するデータ量は決まっており、DAMC Bは一旦アクノリッジ信号をアサートすると、決められたデータ量を連続して転送する。入力転送は1回に1ワード分のデータを1ブロック分連続して転送するとする。1ワードが入力データバス幅64ビットに満たないときは下位ビットに詰めて転送する。MD5、SHA1、SHA512は1ブロックは16ワードなので16回連続して転送する。出力転送はハッシュ値を64ビット幅に区切り、連続して転送するとする。MD5のハッシュ値は128ビットなので2回、SHA1のハッシュ値は160ビットなので3回、SHA512のハッシュ値は512ビットなので8回連続して転送する。
106は拡張メッセージ選択部である。拡張メッセージ選択部106は、外部からの入力メッセージA_MSG、B_MSGと拡張メッセージExMSG_Nとを、A_EXE、A_ALG、A_STP_CNT、B_EXE、B_ALG、B_STP_CNTに応じて選択する。そして、32ビットのデータExMSG_0、ExMSG_1を出力する。ここで、ExMSG_0は後述の拡張メッセージ保持部107の領域0に保持するデータ、ExMSG_1は拡張メッセージ保持部107の領域1に保持するデータである。
(ExMSG_0、ExMSG_1のデータ選択)
図43は、ExMSG_0、ExMSG_1のデータの選択指針を例示する図である。1001はExMSG_0のデータ選択指針である。
・1001−aは、処理AがMD5のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(A_EXE=1かつA_ALG=MD5かつA_STP_CNT=0〜15)を示している。この場合、DMAC Aの転送データの下位32ビットA_MSG[31:0]を選択する。
・1001−bは、処理AがSHA512のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(A_EXE=1かつA_ALG= SHA512かつA_STP_CNT=0〜15)を示している。この場合、DMAC Aの転送データの下位32ビットA_MSG[31:0]を選択する。
・1001−cは、処理BがMD5のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(B_EXE=1かつB_ALG=MD5かつB_STP_CNT=0〜15)を示している。この場合、DMAC Bの転送データの下位32ビットB_MSG[31:0]を選択する。
・1001−dは、処理BがSHA512のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(B_EXE=1かつB_ALG=SHA512かつB_STP_CNT=0〜15)を示している。この場合、DMAC Bの転送データの下位32ビットB_MSG[31:0]を選択する。
・1001−eは上記以外のときであり、は後述する拡張メッセージの下位32ビットExMSG_N [31:0]を選択する。
1002はExMSG_1のデータ選択指針である。
・1002-aは、処理AがMD5のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(A_EXE=1かつA_ALG=MD5かつA_STP_CNT=0〜15)を示している。この場合、DMAC Aの転送データの下位32ビットA_MSG[31:0]を選択する。
・1002-bは、処理AがSHA512のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(A_EXE=1かつA_ALG= SHA512かつA_STP_CNT=0〜15)を示している。この場合、DMAC Aの転送データの上位32ビットA_MSG[63:32]を選択する。
・1002-cは、処理BがMD5のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(B_EXE=1かつB_ALG=MD5かつB_STP_CNT=0〜15)を示している。この場合、DMAC Bの転送データの下位32ビットB_MSG[31:0]を選択する。
・1002-dは、処理BがSHA512のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(B_EXE=1かつB_ALG=SHA512かつB_STP_CNT=0〜15)を示している。この場合。DMAC Bの転送データの上位32ビットB_MSG[63:32]を選択する。
・1002-eは上記以外のときを示しており、後述する拡張メッセージの上位32ビットExMSG_N [63:32]を選択する。
図43の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときは処理に使用するデータを選択し、実行中でないときは拡張メッセージExMSG_Nを出力し、拡張メッセージ保持部107に保持する。
107は拡張メッセージ選択部105の出力データを保持する拡張メッセージ保持部である。1024ビットのフリップフロップで構成し、0〜511ビット目を領域0、512〜1023ビット目を領域1とする。1024ビットのフリップフロップの出力信号をExMSG[1023:0]とする。
(拡張メッセージ保持部)
図44は、拡張メッセージ保持部107の内部構成を例示する図である。1101は領域0のフリップフロップである。1101は1クロック毎に保持しているデータを32ビット下位にシフトし、32ビットデータExMSG_0を最上位32ビットExMSG[511:480]に保持する。1102は領域1のフリップフロップである。502は1クロック毎に保持しているデータを32ビットずつ下位にシフトし、32ビットデータExMSG_1を最上位32ビットExMSG[1023:992]に保持する。
108-1、108-2、108-3はハッシュ関数のメッセージ拡張処理を行うメッセージ拡張処理部である。メッセージ拡張処理はハッシュ・アルゴリズムにより異なるので、ハッシュ・アルゴリズム夫々に対応した拡張メッセージ処理部を備える。108-1はMD5の拡張メッセージ処理部である。108-2はSHA1の拡張メッセージ処理部である。108-3はSHA512の拡張メッセージ処理部である。拡張メッセージ処理部108-1,108-2,108-3の被処理データを置く拡張メッセージ保持部107の領域は予め決めておく。
MD5拡張メッセージ処理部108-1は領域0を、被処理データを置く領域とする。領域0のデータExMSG[511:0]を入力し、1ワード(32ビット)の拡張メッセージMD5_ExMSG[31:0]を出力する。
SHA1拡張メッセージ処理部108-2は領域1を、被処理データを置く領域とする。領域1のデータExMSG[1023:512]を入力し、1ワード(32ビット)の拡張メッセージSHA1_ExMSG[31:0]を出力する。
SHA512拡張メッセージ処理部108-3は領域0、1を、被処理データを置く領域とする。SHA512の1ワードは64ビットであり、領域0に1ワードの下位32ビットデータを格納し、領域1に1ワードの上位32ビットデータを格納する。領域0、1のデータExMSG[1023:0]を入力し、1ワード(64ビット)の拡張メッセージSHA512_ExMSG[63:0]を出力する。
拡張メッセージ処理部108-1,108-2,108-3の被処理データを置く拡張メッセージ保持部107の領域を予め決めて、拡張メッセージ保持部107を拡張メッセージ処理部108-1,108-2,108-3の入力として接続している。このため、拡張メッセージ処理部108-1、108-2、108-3は常に、決められた拡張メッセージ保持部107の領域のデータを入力としてメッセージ拡張処理を行っている。
109はメッセージ拡張処理データ選択部である。メッセージ拡張処理データ選択部109は、
・MD5のメッセージ拡張処理部108-1の出力データMD5_ExMSG。
・SHA1のメッセージ拡張処理部108-2の出力データSHA1_ExMSG。
・SHA512のメッセージ拡張処理部108-3の出力データSHA512_ExMSG。
を、A_EXE、A_ALG、B_EXE、B_ALGに応じて選択し、64ビットデータの拡張メッセージExMSG_Nに出力する。なお、ExMSG_N[31:0]は拡張メッセージ保持部107の領域0に保持する拡張メッセージ、ExMSG_N[63:32]は拡張メッセージ保持部107の領域1に保持する拡張メッセージである。
(ExMSG_N[31:0]、ExMSG_N[63:32]のデータ選択)
図45は、ExMSG_N[31:0]、ExMSG_N[63:32]のデータの選択指針を例示する図である。1201はExMSG_N[31:0]のデータ選択指針である。
・1201−aは、処理AでMD5のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=MD5)を示している。この場合、MD5のメッセージ拡張処理部108-1の出力データMD5_ExMSG[31:0]を選択する。
・1201−bは、処理BでMD5のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG=MD5)を示している。この場合、MD5のメッセージ拡張処理部108-1の出力データMD5_ExMSG[31:0]を選択する。
・1201−cは上記以外のときを示しており、SHA512のメッセージ拡張処理部108-3の出力データSHA512_ExMSG下位32ビット[31:0]を選択する。
1202はExMSG_N[63:32]のデータ選択指針である。
・1202-aは、処理AでSHA1のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=SHA1)を示している。この場合、SHA1のメッセージ拡張処理部108-2の出力データSHA1_ExMSG[31:0]を選択する。
・1202-bは、処理BでSHA1のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG =SHA1)を示している。この場合、SHA1のメッセージ拡張処理部108-2の出力データSHA1_ExMSG[31:0]を選択する。
・1202-cは上記以外のときを示しており、SHA512のメッセージ拡張処理部108-3の出力データSHA512_ExMSG上位32ビット[63:32]を選択する。
図45の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときは処理に使用するメッセージ拡張処理部108-1,108-2,108-3の出力を選択する。実行中でないときはSHA512のメッセージ拡張処理部108-3の出力データSHA_512ExMSGを出力し、拡張メッセージ保持部107に保持する。
110は内部状態変数値データ選択部である。内部状態変数値データ選択部110は、
・ハッシュ初期値A_IV、B_IV。
・ステップ処理結果TEMP_N。
・ハッシュ中間値保持データIHASH。
をA_EXE、A_ALG、A_STP_CNT、A_BLK_CNT、B_EXE、B_ALG、B_STP_CNT、B_BLK_CNTに応じて選択し、256ビットのデータTEMP_0、TEMP_1を出力する。
TEMP_0は後述の内部状態変数値保持部111の領域0に保持するデータ、TEMP_1は内部状態変数値保持部111の領域1に保持するデータである。
(TEMP_0、TEMP_1のデータの選択)
図46は、TEMP_0、TEMP_1のデータの選択指針を例示する図である。1301はTEMP_0のデータ選択指針である。
・1301−aは、処理AでMD5のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT=0かつA_STP_CNT=0)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1301−bは、処理AでSHA512のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄 (A_EXE=1かつSHA512かつA_BLK_CNT=0かつA_STP_CNT=0)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1301−cは、処理AでMD5のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT≠0かつA_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値保持データの下位256ビットIHASH[255:0]を選択する。
・1301−dは、処理AでSHA512のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(A_EXE=1かつA_ALG= SHA512かつA_BLK_CNT≠0かつA_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの下位256ビットIHASH[255:0]を選択する。
・1301−eは、処理BでMD5のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT=0かつB_STP_CNT=0)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1301−fは、処理BでSHA512のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(B_EXE=1かつB_ALG=SHA512かつB_BLK_CNT=0かつB_STP_CNT=0)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1301−gは、処理BでMD5のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT≠0かつB_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの下位256ビットIHASH[255:0]を選択する。
・1301−hは、処理BでSHA512のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(B_EXE=1かつB_ALG= SHA512かつB_BLK_CNT≠0かつB_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの下位256ビットIHASH[255:0]を選択する。
・1301−iは上記以外のときを示しており、後述する内部状態変数値データの下位256ビットTEMP_N[255:0]を選択する。
1302はTEMP_1のデータ選択指針である。
・1302-aは、処理AでMD5のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT=0かつA_STP_CNT=0)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1302-bは、処理AでSHA512のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(A_EXE=1かつSHA512かつA_BLK_CNT=0かつA_STP_CNT=0)を示している。この場合、処理Aハッシュ初期値の上位256ビットA_IV[512:256]を選択する。
・1302-cは、処理AでMD5のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT≠0かつA_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの上位256ビットIHASH[511:256]を選択する。
・1302-dは、処理AでSHA512のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(A_EXE=1かつA_ALG= SHA512かつA_BLK_CNT≠0かつA_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの上位256ビットIHASH[511:256]を選択する。
・1302-eは、処理BでMD5のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT=0かつB_STP_CNT=0)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1302-fは、処理BでSHA512のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(B_EXE=1かつB_ALG=SHA512かつB_BLK_CNT=0かつB_STP_CNT=0)を示している。この場合、処理Bハッシュ初期値の上位256ビットB_IV[512:256]を選択する。
・1302-gは、処理BでMD5のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT≠0かつB_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの上位256ビットIHASH[511:256]を選択する。
・1302-hは、処理BでSHA512のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(B_EXE=1かつB_ALG= SHA512かつB_BLK_CNT≠0かつB_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの上位256ビットIHASH[511:256]を選択する。
・1302-iは上記以外のときを示しており、後述する内部状態変数値データの上位256ビットTEMP_N[511:256]を選択する。
図46の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときは処理で使用するデータを選択し、実行中でないときは内部状態変数値TEMP_Nを出力し、内部状態変数値保持部111に保持する。
111は内部状態変数値データ選択部109の出力データを保持する内部状態変数値保持部である。512ビットのフリップフロップで構成し、0〜255ビット目を領域0、256〜511ビット目を領域1とする。512ビットのフリップフロップの出力信号をTEMP[511:0]とする。領域0はTEMP_0を保持し、領域1はTEMP_1を保持する。
112-1、112-2、112-3はステップ処理を行うステップ処理部である。ステップ処理はハッシュ・アルゴリズムにより異なるので、ハッシュ・アルゴリズム夫々に対応したステップ処理部を備える。112-1はMD5のステップ処理部である。112-2はSHA1のステップ処理部である。112-3はSHA512のステップ処理部である。ステップ処理部112-1,112-2,112-3の被処理データを置く内部状態変数値保持部111の領域は予め決めておく。
MD5ステップ処理部112-1は領域0を被処理データを置く領域とする。領域0のデータTEMP[127:0]と、拡張メッセージ保持部107の出力データExMSG [511:480]を入力し、128ビットの内部状態変数値MD5_TEMP[127:0]を出力する。
SHA1ステップ処理部112-2は領域1を被処理データを置く領域とする。領域1のデータTEMP[255:128]と拡張メッセージ保持部106出力データExMSG [1023:992]を入力し、160ビットの内部状態変数値SHA1_TEMP[159:0]を出力する。
SHA512ステップ処理部112-3は領域0、1を被処理データを置く領域とする。領域0、1のデータTEMP[511:0]と拡張メッセージ保持部106の出力データExMSG[511:480]、ExMSG[1023:992]を入力し、512ビットの内部状態変数値SHA512_TEMP[511:0]を出力する。
ステップ処理部112-1,112-2,112-3が被処理データを置く内部状態変数値保持部111の領域を予め決めて内部状態変数値保持部111を、ステップ処理部の入力として接続する。このため、ステップ処理部112-1,112-2,112-3は常に、決められた内部状態変数値保持部111の領域のデータを入力としてステップ処理を行っている。
113はステップ処理データ選択部である。
ステップ処理データ選択部である113は、
・MD5のステップ処理部112-1の出力データMD5_TEMP。
・SHA1のステップ処理部112-2の出力データSHA1_TEMP。
・SHA512のステップ処理部112-3の出力データSHA512_TEMP。
を、A_EXE、A_ALG、B_EXE、B_ALGに応じて選択し、TEMP_Nに出力する。TEMP_N[255:0]は内部状態変数値保持部111の領域0に保持する内部状態変数値データ、TEMP_N[511:256]は内部状態変数値保持部111の領域1に保持する内部状態変数値データである。
(TEMP_N[255:0]、TEMP_N[511:256]のデータの選択)
図47は、TEMP_N[255:0]、TEMP_N[511:256]のデータの選択指針を例示する図である。
1401はTEMP_N[255:0]のデータ選択指針である。
・1401−aは、処理AでMD5のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=MD5)を示している。この場合、下位128ビットはMD5のステップ処理部112-1の出力データMD5_TEMP[127:0]を選択する。
・1401−bは、処理BでMD5のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG=MD5)を示している。この場合、下位128ビットはMD5のステップ処理部112-1の出力データMD5_TEMP[127:0]を選択する。
・1401−cは上記以外を示しており、SHA512のステップ処理部112-3の出力データSHA512_TEMP [127:0]を選択する。
TEMP_N[255:128]は常にSHA512_TEMP[255:128]を出力する。
1402はTEMP_N[511:256]のデータ選択指針である。
・1402-aは、処理AでSHA1のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=SHA1)を示している。この場合、下位160ビットはSHA1のステップ処理部112-2の出力データSHA1_TEMP [159:0]を選択する。
・1402-bは、処理BでSHA1のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG=SHA1)を示している。この場合、下位160ビットはSHA1のステップ処理部112-2の出力データSHA1_TEMP [159:0]を選択する。
・1402-cは上記以外を示しており、SHA512のステップ処理部112-3の出力データSHA512_TEMP [415:256]を選択する。
TEMP_N[511:416]は常にSHA512_TEMP[511:416]を出力する。
図47の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときはそれぞれの処理に使用するステップ処理部の出力を選択する。実行中でないときはSHA512のステップ処理部112-3の出力データSHA512_TEMPを出力し、内部状態変数値保持部111に保持する。
114はハッシュ中間値データ選択部である。ハッシュ中間値データ選択部114は、ハッシュ初期値A_IV、B_IVとハッシュ中間値結果IHASH_NとをA_EXE、A_ALG、A_BLK_CNT、B_EXE、B_ALG、B_BLK_CNTに応じて選択する。そして、256ビットのデータIHASH_0、IHASH_1を出力する。
IHASH_0は後述のハッシュ中間値保持部115の領域0に保持するデータ、IHASH_1はハッシュ中間値保持部115の領域1に保持データである。
(IHASH_0、IHASH_1のデータ選択)
図48は、IHASH_0、IHASH_1のデータの選択指針を例示する図である。
1501はIHASH_0のデータ選択指針である。
・1501−aは、処理AでMD5のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT=0かつA_STP_CNT≠65)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1501−bは、処理AでSHA512のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(A_EXE=1かつA_ALG=SHA512かつA_BLK_CNT=0かつA_STP_CNT≠81)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1501−cは、処理BでMD5のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT=0かつB_STP_CNT≠65)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1501−dは、処理BでSHA512のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(B_EXE=1かつB_ALG=SHA512かつB_BLK_CNT=0かつB_STP_CNT≠81)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1501−eは上記以外を示しており、後述するハッシュ中間値データの下位256ビットIHASH_N [255:0]を選択する。
1502はTEMP_1のデータ選択指針である。
・1502-aは、処理AでMD5のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT=0かつA_STP_CNT≠65)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1502-bは、処理AでSHA512のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(A_EXE=1かつA_ALG=SHA512かつA_BLK_CNT=0かつA_STP_CNT≠81)を示している。この場合、処理Aハッシュ初期値の上位256ビットA_IV[512:256]を選択する。
・1502-cは、処理BでMD5のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT=0かつA_STP_CNT≠65)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1502-dは、処理BでSHA512のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(B_EXE=1かつB_ALG=SHA512かつB_BLK_CNT=0かつB_STP_CNT≠81)を示している。この場合、処理Bハッシュ初期値の上位256ビットB_IV[512:256]を選択する。
・1502-eは上記以外を示しており、後述するハッシュ中間値データの上位256ビットIHASH_N[511:256]を選択する。
図48の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときは処理に使用するデータを選択し、実行中でないときはハッシュ中間値IHASH_Nを出力する。
115はハッシュ中間値データ選択部114の出力データを保持するハッシュ中間値保持部である。512ビットのフリップフロップで構成し、0〜255ビット目を領域0、256〜511ビット目を領域1とする。512ビットのフリップフロップの出力信号をIHASH[511:0]とする。領域0はIHASH_0を保持し、領域1はIHASH_1を保持する。
前述したように、加算処理は所定回数のステップ処理後の内部状態変数値を加算し、結果を新たなハッシュ中間値とする処理である。本実施形態においては1番目からN番目のステップ処理後の内部状態変数値に毎サイクル加算するが、ハッシュ中間値保持部には、N番目のステップ処理後の内部状態変数値に加算した値のみ保持する。
IHASH_0を保持する条件は以下である。
・処理AでMD5又はSHA512のハッシュ処理を実行中で、処理開始時又はN番目の加算処理のとき。
・処理BでMD5又はSHA512のハッシュ処理を実行中で、処理開始時又はN番目の加算処理のとき。
IHASH_1を保持する条件は以下である。
・処理AでSHA1又はSHA512のハッシュ処理を実行中で、処理開始時又はN番目の加算処理のとき。
・処理BでSHA1又はSHA512のハッシュ処理を実行中で、処理開始時又はN番目の加算処理のとき。
116-1、116-2、116-3は加算処理部であり、ステップ処理部112-1、112-2、112-3において生成し、内部状態変数値保持部111に保持したデータとハッシュ中間値保持部113の出力を加算して次のハッシュ中間値を生成する。加算処理部はハッシュ・アルゴリズムによりビット巾が異なるので、ハッシュ・アルゴリズム夫々に対応した加算処理部を備える。116-1はMD5の加算処理部である。116-2はSHA1の加算処理部である。116-3はSHA512の加算処理部である。加算処理部116-1,116-2,116-3の被処理データを置くハッシュ中間値保持部115の領域、及び内部状態変数値保持部111の領域は予め決めておく。
MD5加算処理部116-1は32ビットの加算器4個で構成し、ハッシュ中間値保持部115の領域0に被処理データを置くとする。ハッシュ中間値保持部115の領域0のデータIHASH[127:0]と内部状態変数値保持部111の出力データTEMP [127:0]を加算し、128ビットのハッシュ中間値MD5_IHASH[127:0]を出力する。
SHA1加算処理部116-2は32ビットの加算器5個で構成し、ハッシュ中間値保持部115の領域1に被処理データを置くとする。ハッシュ中間値保持部115の領域1のデータIHASH[415:256]と内部状態変数値保持部111の出力データTEMP[415:256]を加算し、160ビットのハッシュ中間値SHA1_IHASH[159:0]を出力する。
SHA512加算処理部116-3は64ビットの加算器8個で構成し、ハッシュ中間値保持部115の領域0、1に被処理データを置くとする。ハッシュ中間値保持部115領域0、1のデータIHASH[511:0]と内部状態変数値保持部111の出力データTEMP[511:0]を加算し、512ビットのハッシュ中間値SHA512_IHASH[255:0]を出力する。
加算処理部116-1,116-2,116-3は被処理データを置く内部状態変数値保持部111の領域を予め決めてあり、加算処理部の入力として接続する。このため、加算処理部116-1、116-2、116-3は常に決められた内部状態変数値保持部111の領域、及び内部状態変数値保持部111領域のデータを入力として加算処理を行う。
117はハッシュ中間値結果選択部である。ハッシュ中間値結果選択部117は、
・MD5の加算処理部116-1の出力データMD5_IHASH。
・SHA1の加算処理部116-2の出力データSHA1_IHASH。
・SHA512の加算処理部116-3の出力データSHA512_IHASH。
を、A_EXE、A_ALG、B_EXE、B_ALGに応じて選択し、IHASH_Nに出力する。IHASH_N[255:0]はハッシュ中間値保持部115の領域0に保持するハッシュ中間値データ、IHASH_N[511:256]はハッシュ中間値保持部115の領域1に保持するハッシュ中間値データである。
(IHASH_N[255:0]、IHASH_N[511:256]のデータ選択)
図49は、IHASH_N[255:0]、IHASH_N[511:256]のデータの選択指針を例示する図である。
1601はIHASH_N[255:0]のデータ選択指針である。
・1601−aは、処理AでMD5のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=MD5)を示している。この場合、下位128ビットはMD5の加算処理部116-1の出力データMD5_IHASH[127:0]を選択する。
・1601−bは、処理BでMD5のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG=MD5)を示している。この場合、下位128ビットはMD5の加算処理部116-1の出力データMD5_IHASH [127:0]を選択する。
・1601−cは上記以外を示しており、SHA512の加算処理部116-3の出力データSHA512_IHASH [127:0]を選択する。
IHASH_N[255:128]は常にSHA512_IHASH[255:128]を出力する。
1602はIHASH_N[511:256]のデータ選択指針である。
・1602-aは、処理AでSHA1のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=SHA1)を示している。この場合、下位160ビットはSHA1の加算処理部116-2の出力データSHA1_IHASH[159:0]を選択する。
・1602-bは、処理BでSHA1のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG=SHA1)を示している。この場合、下位160ビットはSHA1の加算処理部116-2の出力データSHA1_IHASH [159:0]を選択する。
・1602-cは上記以外を示しており、SHA512の加算処理部116-3の出力データSHA512_TEMP [415:256]を選択する。
IHASH_N[511:416]は常にSHA512_IHASH[511:416]を出力する。
図49の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときは処理に使用するステップ処理部の出力を選択する。実行中でないときはSHA512の加算処理部116-3の出力データSHA512_IHASHを出力し、ハッシュ中間値保持部115に保持する。
(制御部の内部構成)
図34は制御部101の内部構成を例示する図である。図34において、201は処理Aを制御する処理A制御部である。処理A制御部201はハッシュ処理に必要なパラメタを設定する処理Aレジスタ群202、実行中のブロック数をカウントするブロックカウンタA 203、実行中のステップ数をカウントするステップカウンタA 204で構成されている。
図35は、レジスタの仕様を例示する図である。処理Aレジスタ群202に備えるレジスタの仕様を図35の301〜304に示す。
301は処理Aのハッシュ処理の開始を要求するレジスタA_ENBである。1を設定することによりハッシュ処理の開始を指示する。ハッシュ処理終了時に自動クリアする。302はハッシュ・アルゴリズムを設定するレジスタA_ALGである。”00”を設定するとMD5、”01”を設定するとSHA1、”10”を設定するとSHA512を選択する。303はハッシュ処理するメッセージのブロック数を設定するレジスタA_BLKである。ハッシュ処理するメッセージのブロック数-1の値を設定する。304はハッシュ処理に使用する初期値を設定するレジスタである。初期値はハッシュ・アルゴリズムにより既定されている。
処理A制御部201は、301のレジスタA_ENBに1が設定されてハッシュ処理の開始を要求されると、レジスタA_ALGで設定されたハッシュ処理を行うために必要となる
・拡張メッセージ保持部の領域。
・内部状態変数保持部の領域。
・拡張メッセージ処理部。
・ステップ処理部。
・加算処理部
(以降まとめて処理エンジンと呼ぶ)を使用する要求を後述の共有リソース管理部209に出す。拡張メッセージ保持部の特定の領域を使用する要求を示す信号A_ExMSG_REQを発行し、共有リソース管理部209から使用許可を示す信号A_ExMSG_ACKを受信する。内部状態変数保持部の特定の領域を使用する要求を示す信号信号A_TEMP_REQを発行し、共有リソース管理部209から使用許可を示す信号A_TEMP_ACKを受信する。特定のハッシュ・アルゴリズムの処理エンジンを使用する要求を示す信号A_ENG_REQを発行し、共有リソース管理部209から使用許可を示す信号A_ENG_ACKを受信する。
205は処理Bを制御する処理B制御部である。処理B制御部205は処理A制御部201と同様に、処理Bレジスタ群206、ブロックカウンタB 207、ステップカウンタB 208で構成されている。処理Bレジスタ群206に備えるレジスタの仕様を図35の305〜308に示す。
305は処理Bのハッシュ処理の開始を要求するレジスタである。306はハッシュ・アルゴリズムを設定するレジスタである。307はハッシュ処理するメッセージのブロック数を設定するレジスタである。ハッシュ処理するメッセージのブロック数-1の値を設定する。309はハッシュ処理に使用する初期値を設定するレジスタである。各レジスタの仕様は処理Aレジスタ群202に備えるレジスタ301〜304の仕様と同様である。
処理B制御部205は305のレジスタB_ENBに1が設定されてハッシュ処理の開始を要求されると、レジスタB_ALGで設定されたハッシュ処理を行うために必要となる
・拡張メッセージ保持部の領域。
・内部状態変数保持部の領域。
・処理エンジン。
を使用する要求を共有リソース管理部209に出す。拡張メッセージ保持部の特定の領域を使用する要求を示す信号B_ExMSG_REQを発行し、共有リソース管理部209から使用許可を示す信号B_ExMSG_ACKを受信する。内部状態変数保持部の特定領域を使用する要求を示す信号B_TEMP_REQを発行し、共有リソース管理部209から使用許可を示す信号B_TEMP_ACKを受信する。特定のハッシュ・アルゴリズムの処理エンジンを使用する要求を示す信号B_ENG_REQを発行し、共有リソース管理部209から使用許可を示す信号B_ENG_ACKを受信する。
209は処理Aと処理Bが共有するリソースを管理する共有リソース管理部である。処理Aと処理Bが共有するリソースは、以下の通りである。
・拡張メッセージ保持部107。
・内部状態変数値保持部111。
・ハッシュ中間値保持部115。
・メッセージ拡張処理部180-1,108-2,108-3。
・ステップ処理部112-1,112-2,112-3。
・加算処理部116-1,116-2,116-3。
210は拡張メッセージ保持部107の使用領域を管理する拡張メッセージ保持領域アービタであり、処理Aと処理Bが同一の領域を使用する要求をしたとき、アービトレーションし、使用許可を与える。
211は内部状態変数値保持部111の使用領域を管理する内部状態変数値保持アービタであり、処理Aと処理Bが同一の領域を使用する要求をしたとき、アービトレーションし、使用許可を与える。ハッシュ中間値保持部115は内部状態変数値保持部111と同一の領域に区切られ、ハッシュ中間値保持部115の領域の使用許可が与えられると同時にハッシュ中間値保持部115の同一領域の使用許可も与えられる。
212はメッセージ拡張処理部180-1,108-2,108-3の使用を管理する処理エンジンアービタであり、処理Aと処理Bが同一のハッシュ・アルゴリズムのメッセージ拡張処理部を使用する要求したとき、アービトレーションし、使用許可を与える。メッセージ拡張処理部の使用許可が与えられると同時に同一のハッシュ・アルゴリズムのステップ処理部、加算処理部の使用許可も与えられる。
213は処理Aの実行状態を示すA_EXEである。1のとき実行中を示す。拡張メッセージ保持領域の使用許可A_ExMSG_ACK、内部状態変数値保持領域の使用許可A_TEMP_ACK、処理エンジンの使用許可A_ENG_ACKが与えられたときにA_EXE=1(実行中)となる。
214は処理Bの実行状態を示すB_EXEである。1のとき実行中を示す。拡張メッセージ保持領域の使用許可B_ExMSG_ACK、内部状態変数値保持領域の使用許可B_TEMP_ACK、処理エンジンの使用許可B_ENG_ACKが与えられたときB_EXE=1(実行中)となる。
(システム構成例)
図36はハッシュ処理回路100を動作させるためのシステムの構成例を示した図である。
400はハッシュ処理システムである。401はハッシュ処理システム400の動作を制御するCPUである。402はハッシュ処理するメッセージやハッシュ値などを保持するためのメモリである。403は処理Aの入力メッセージをメモリ402からハッシュ処理回路100に転送し、処理Aのハッシュ処理結果をハッシュ処理回路100からメモリ402に転送するDMAC Aである。404は処理Bの入力メッセージをメモリ402からハッシュ処理回路100に転送し、処理Bのハッシュ処理結果をハッシュ処理回路100からメモリ402に転送するDMAC Bである。405はハッシュ処理システム200の割り込み信号を制御する割り込み制御部である。
406はハッシュ処理回路100、CPU401、メモリ402、DMAC A403、DMAC B404、割り込み制御部405を接続するシステムバスであり、アドレス信号、データ信号、制御信号などから成る。407はDMAC A403から割り込み制御部405への割り込み信号であり、処理Aのハッシュ処理結果をハッシュ回路100からメモリ402に転送した後に割り込み信号を上げ、割り込み制御部405に通知する。408はDMAC B204から割り込み制御部405への割り込み信号であり、処理Bのハッシュ処理結果をハッシュ回路100からメモリ402に転送した後に割り込み信号を上げ、割り込み制御部405に通知する。割り込み制御部405は不図示の割り込み信号により、CPU401にハッシュ処理結果格納を通知する。
(CPUの動作)
図37は、本実施形態のハッシュ処理システムにおける、メッセージ受信毎のCPUの動作フローを示す図である。501はメッセージ受信時のフローである。CPUはメッセージを受信するとST001において、処理Aか処理Bかどちらで処理するか決定する。CPU401は内部に処理Aと処理Bの処理状況を示す処理状況テーブルを持つ。処理状況テーブルは「処理中」か「処理中でない」ことを示すテーブルである。CPUは処理A、処理Bのうち「処理中でない」方で処理することに決定する。ここで、両方「処理中でない」場合は処理Aの優先度が高いとする。両方「処理中」の場合は、どちらかが空くのを待つ。処理Aに決定するとST002において、処理状況テーブルの処理Aを「処理中」と更新し、処理Aスレッドを起動する。処理Bに決定するとST003において、処理状況テーブルの処理Bを「処理中」と更新し、処理Bスレッドを起動する。
502は処理Aスレッド起動時のフローである。処理Aスレッドが起動するとST004において、DMAC Aのレジスタにメッセージをメモリ402からハッシュ回路100へ転送する入力転送設定、ハッシュ値をハッシュ回路100からメモリ402へ転送する出力転送設定をし、起動する。そして、ST005においてハッシュ処理回路100の処理Aレジスタ群にハッシュ処理のための設定をし、処理の開始を要求する。DMAC Aのデータ出力転送が終了するのを待ち(ST006)、処理Aスレッドを終了する。
503は処理Bスレッド起動時のフローである。処理Bスレッドが起動するとST009において、DMAC Bのレジスタにメッセージをメモリ402からハッシュ回路100へ入力する入力転送設定、ハッシュ値をハッシュ回路100からメモリ402へ転送する出力転送設定をし、起動する。そして、ST010においてハッシュ処理回路100の処理Bレジスタ群にハッシュ処理のための設定をし、処理の開始を要求する。DMAC Bのデータ出力転送が終了するのを待ち(ST011)、処理Bスレッドを終了する。
504は処理Aスレッド終了通知受信時のフローである。ST014において処理状況テーブルの処理Aを「処理中でない」と更新する。505は処理Bスレッド終了通知受信時のフローである。ST015において処理状況テーブルの処理Bを「処理中でない」と更新する。
(ハッシュ回路の動作)
図38は、本実施形態のハッシュ処理システムにおける、ハッシュ回路100の動作フローを示す図である。
600は処理Aの開始要求受信時のフローである。CPUが処理Aのジョブ開始設定レジスタ301に’1’を設定したとき処理Aの開始要求を受信する。処理Aの開始要求を受信すると処理A制御部201は、処理Aのハッシュ・アルゴリズム設定レジスタ302の値A_ALGに応じて共有リソース使用要求A_ExMSG_REQ、A_TEMP_REQ、A_ENG_REQを発行する(ST101−A)。
共有リソース管理部209がA_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKを与えるのを待つ(ST102-A)。A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKが与えられるとDMAC Aに対してデータ入力転送要求を出す(ST103-A)。ST102-Aでアクノリッジを受信すると処理が開始し、ステップカウンタA_STP_CNTを+1更新する(ST105-A)。ST106−Aにおいてハッシュ・アルゴリズムで既定されている1ブロック分のデータ転送が終了したか判断し、終了していなければST103-Aへ戻り再びデータ入力転送要求を出す。終了していればデータ入力転送は終了し、ST107-Aへ進む。ST107-Aにおいて、ステップカウンタを+1更新する。
ST108-Aにおいて、A_STP_CNTがハッシュ・アルゴリズムで既定されている値+1を超えたかを判断する。規定値+1を超えるまでST107-Aを繰り返す。規定値+1を超えるとステップカウンタをクリアし、ブロックカウンタA_BLK_CNTを+1更新する(ST109-A)。ST108-AでA_BLK_CNTが処理Aブロック数設定レジスタ303で設定した値A_BLK-1を超えたかを判断する。A_BLK-1を超えるまでデータを入力し、ハッシュ処理を行う。A_BLK_CNTがA_BLK-1を超えるとブロックカウンタをクリアする(ST111−A)。ハッシュ値を出力するためST112-AにおいてDMAC Aに対してデータ出力転送要求を出し、ST113-Aでアクノリッジを待つ。ハッシュ値分データ転送が終了するまでST112-A,ST113-Aを繰り返す。
ハッシュ値分データ転送が終了すると処理Aのジョブ開始設定レジスタ301をクリアし(ST115-A)、共有リソース使用要求A_ExMSG_REQ、A_TEMP_REQ、A_ENG_REQを取り下げて(ST116-A)、処理を終了する。
601は処理Bの開始要求受信時のフローである。CPUが処理Bのジョブ開始設定レジスタ301に’1’を設定したとき処理Bの開始要求を受信する。処理Bの開始要求を受信すると処理B制御部201は、処理Bのハッシュ・アルゴリズム設定レジスタ302の値B_ALGに応じて共有リソース使用要求B_ExMSG_REQ、B_TEMP_REQ、B_ENG_REQを発行する(ST101−B)。共有リソース管理部209がB_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKを与えるのを待つ(ST102−B)。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが与えられるとDMAC Bに対してデータ入力転送要求を出す(ST103−B)。ST102−Bにおいてアクノリッジを受信すると処理が開始し、ステップカウンタB_STP_CNTを+1更新する(ST105−B)。
ST106−Bにおいてハッシュ・アルゴリズムで既定されている1ブロック分のデータ転送が終了したか判断し、終了していなければST103−Bへ戻り再びデータ入力転送要求を出す。終了していればデータ入力転送は終了し、ST107−Bへ進む。ST107−Bにおいて、ステップカウンタを+1更新する。ST108−Bで、B_STP_CNTがハッシュ・アルゴリズムで既定されている値+1を超えたかを判断する。規定値+1を超えるまでST107−Bを繰り返す。規定値+1を超えるとステップカウンタをクリアし、ブロックカウンタB_BLK_CNTを+1更新する(ST109−B)。ST108−BにおいてB_BLK_CNTが処理Bブロック数設定レジスタ303で設定した値B_BLK-1を超えたかを判断する。B_BLK-1を超えるまでデータを入力し、ハッシュ処理を行う。B_BLK_CNTがB_BLK-1を超えるとブロックカウンタをクリアする(ST111−B)。ハッシュ値を出力するためST112−BにおいてDMAC Bに対してデータ出力転送要求を出し、ST113−Bでアクノリッジを待つ。ハッシュ値分データ転送が終了するまでST112-B,ST113−Bを繰り返す。ハッシュ値分データ転送が終了すると処理Bのジョブ開始設定レジスタ301をクリアし(ST115−B)、共有リソース使用要求B_ExMSG_REQ、B_TEMP_REQ、B_ENG_REQを取り下げて(ST116−B)、処理を終了する。
(メッセージ例)
図39は本実施形態において、ハッシュ処理する3つのメッセージであるメッセージA、メッセージB、メッセージCを例示した図である。メッセージAはハッシュ・アルゴリズムMD5でハッシュ処理する要求とする。16ワード(512bit)を1ブロックとし、合計2ブロックのメッセージである。メッセージBはハッシュ・アルゴリズムSHA1でハッシュ処理する要求とする。16ワード(512bit)を1ブロックとし、合計1ブロックのメッセージである。メッセージCはハッシュ・アルゴリズムSHA512でハッシュ処理する要求とする。16ワード(1024bit)を1ブロックとし、合計8ブロックのメッセージである。
(処理詳細)
図40、図41にCPU401がメッセージA、メッセージB、メッセージCの順に受信したときのタイミングチャートを示す。
メッセージAをT00以前に受信したとする。CPU401はメッセージAを受信すると図37のCPUの動作フローに従い動作し、ST001において処理Aでハッシュ処理すると決定する。ST005において、ハッシュ処理回路100の処理Aレジスタ群に設定する。A_ALG(302)にMD5を示す”00”、A_BLK(303)に”1”、A_IV(304)にMD5のアルゴリズムで既定されている値を設定し、A_ENB(301)に”1”を設定し、ハッシュ処理の開始を要求する。ハッシュ処理回路100は処理Aの開始要求を受信すると図38のハッシュ処理回路の動作フローに従い動作しST101−Aにて、MD5のハッシュ処理に必要な
・拡張メッセージ保持部107の領域0の使用要求。
・内部状態変数値保持部111の領域0の使用要求。
・MD5の処理エンジンの使用要求。
を共有リソース管理部209に出す。共有リソース管理部209は、処理Bが使用していないので使用許可A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKを与え、処理が開始する。A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKが与えられるとA_EXEは1になる(T00)。
T00で、A_EXE=”1”、A_ALG=MD5となる。このため、メッセージ拡張処理結果選択部109はExMSG_N[31:0]の出力としてMD5のメッセージ拡張処理部108-1の処理結果MD5_ExMSG[31:0]を選択する。そして、ステップ処理結果選択部113はTEMP_N[127:0]の出力としてMD5のステップ処理部112-1の処理結果MD5_TEMP[127:0]を選択する。また、加算処理結果選択部117はIHASH_N[127:0]の出力としてMD5の加算処理部116-1の処理結果MD5_IHASH[127:0]を選択する。また、DMAC Aに対してデータ入力転送要求A_DMA_REQ[0]を発行する。
T01で、A_DMA_ACK[0]がアサートされると次クロックの立ち上がりからステップカウンタA_STP_CNTの更新を開始する。A_STP_CNTは毎クロックサイクル+1更新し、65までカウントするとクリアし、ゼロに戻る。
T01-T06で、最初のブロックの入力メッセージ16ワードが転送され、DMA IF部103はA_DMA_IDATA[63:0]をA_MSG[63:0]として出力する。拡張メッセージ保持データ選択部106はExMSG_0[31:0]の出力として入力メッセージであるA_MSG[31:0]を選択する。
MD5のメッセージ拡張処理部108-1はT01-T06で拡張メッセージ保持部107の領域0を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部106は処理結果ExMSG_N[31:0]を選択しないので拡張メッセージ保持部107に保持しない。拡張メッセージ保持部107にT02-T07で1〜16番目の拡張メッセージ(入力メッセージ)を保持する。
MD5のステップ処理部112-1はT02-T07で拡張メッセージ保持部107に保持した1〜16番目の拡張メッセージを被処理データとし、処理を行い、1〜16番目の内部状態変数値を生成する。処理結果はT03-T08で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はT0-T1でTEMP_0[255:0]にハッシュ初期値A_IV[255:0]を出力し、T02以降MD5のステップ処理結果を選択したTEMP_N[255:0]を出力する。従ってMD5のステップ処理部112-1は、T02で、ハッシュ初期値と1番目の入力メッセージを使って1番目の内部状態変数値を生成しする。また、T03-T08で、n−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=2〜16)。
MD5の加算処理部116-1はT03-T8で内部状態変数値保持部111に保持した1〜16番目のステップ処理データを被処理データとし、1〜16番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持データ選択部114は処理結果IHASH_N[255:0]は選択しないのでハッシュ中間値保持部115に保持しない。
T07-T17で拡張メッセージ保持データ選択部106はExMSG_0[31:0]の出力として、MD5のメッセージ拡張処理部108-1の処理結果であるExMSG_N[31:0]を選択する。
MD5のメッセージ拡張処理部108-1はT07-T17で拡張メッセージ保持部107領域0に保持した16ワードのデータを被処理データとし、17番目〜64番目の拡張メッセージを生成する。処理結果はT08-T20で拡張メッセージ保持部107に保持する。拡張メッセージ保持データ選択部106はMD5の拡張処理結果を選択したExMSG_N[31:0]を出力する。そこで、MD5のメッセージ拡張処理部108-1は、n−16番目からn−1番目の16ワードの拡張メッセージを使ってn番目の拡張メッセージを生成する(n=17〜64)。
MD5のステップ処理部112-1はT08-T18で拡張メッセージ保持部107に保持した17〜64番目の拡張メッセージを被処理データとし、処理を行い、17〜64番目の内部状態変数値を生成する。処理結果はT09-T19で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はMD5のステップ処理結果を選択したTEMP_N[255:0]を出力する。従ってMD5のステップ処理部112-1は、T08-T18でn−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=17〜64)。
MD5の加算処理部116-1はT09-T19で内部状態変数値保持部111に保持した17〜64番目のステップ処理データを被処理データとし、17〜64番目の内部状態変数値に対する加算処理を行う。T19で生成した64番目の内部状態変数値に対する加算処理結果が1ブロック目のハッシュ中間値である。ハッシュ中間値保持データ選択部114はT0-T18でハッシュ初期値A_IV[255:0]を出力し、T19以降IHASH_N[255:0]を出力する。従ってMD5の加算処理部116-1は、T19で、ハッシュ初期値と64番目の内部状態変数値の加算処理を行い、処理結果はT20でハッシュ中間値保持部115に保持する。
T20でステップカウンタA_STP_CNTはゼロに戻り、ブロックカウンタA_BLK_CNTが1になる。A_BLK_CNTはA_BLKの値”1”を超えないのでDMAC Aに対して次ブロックのデータ入力転送要求A_DMA_REQ[0]を発行する。
T21で、A_DMA_ACK[0]がアサートされると次クロックの立ち上がりからステップカウンタA_STP_CNTの更新を開始する。A_STP_CNTは毎クロックサイクル+1更新し、65までカウントするとクリアし、ゼロに戻す。
T21-T26で、2番目のブロックの入力メッセージ16ワードが転送され、DMA IF部103はA_DMA_IDATA[63:0]をA_MSG[63:0]として出力する。拡張メッセージ保持データ選択部106はExMSG_0[31:0]の出力として入力メッセージであるA_MSG[31:0]を選択する。
MD5のメッセージ拡張処理部108-1はT21-T26で拡張メッセージ保持部107の領域0を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部106は処理結果ExMSG_N[31:0]を選択しないので拡張メッセージ保持部107に保持しない。拡張メッセージ保持部107にT22-T27で1〜16番目の拡張メッセージ(入力メッセージ)を保持する。
MD5のステップ処理部112-1はT22-T27で拡張メッセージ保持部107に保持した1〜16番目の拡張メッセージを被処理データとし、処理を行い、1〜16番目の内部状態変数値を生成する。処理結果はT23-T28で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はT20-T21でTEMP_0[255:0]にIHASH[255:0]を出力し、T02以降MD5のステップ処理結果を選択したTEMP_N[255:0]を出力する。従ってMD5のステップ処理部112-1は、T22で、前のブロックのハッシュ中間値と1番目の入力メッセージを使って1番目の内部状態変数値を生成する。また、T23-T28で、n−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=2〜16)。
MD5の加算処理部116-1はT23-T28で内部状態変数値保持部111に保持した1〜16番目のステップ処理データを被処理データとし、1〜16番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持115が保持する条件に一致しないので保持しない。
T27-T42で拡張メッセージ保持データ選択部106はExMSG_0[31:0]の出力として、MD5のメッセージ拡張処理部108-1の処理結果であるExMSG_N[31:0]を選択する。
MD5のメッセージ拡張処理部108-1はT27-T42で拡張メッセージ保持部107領域0に保持した16ワードのデータを被処理データとし、17番目〜64番目の拡張メッセージを生成する。処理結果はT28-T43で拡張メッセージ保持部107に保持する。拡張メッセージ保持データ選択部106はMD5の拡張処理結果を選択したExMSG_N[31:0]を出力する。そこで、MD5のメッセージ拡張処理部108-1は、n−16番目からn−1番目の16ワードの拡張メッセージを使ってn番目の拡張メッセージを生成する(n=17〜64)。
MD5のステップ処理部112-1はT28-T43で拡張メッセージ保持部107に保持した17〜64番目の拡張メッセージを被処理データとし、処理を行い、17〜64番目の内部状態変数値を生成する。処理結果はT29-T44で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はMD5のステップ処理結果を選択したTEMP_N[255:0]を出力する。従ってMD5のステップ処理部112-1は、T28-43でn−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=17〜64)。
MD5の加算処理部116-1はT29-T44で内部状態変数値保持部111に保持した17〜64番目のステップ処理データを被処理データとし、17〜64番目の内部状態変数値に対する加算処理を行う。T44で生成した64番目の内部状態変数値に対する加算処理結果が2ブロック目のハッシュ中間値である。ハッシュ中間値保持部115に前のブロックのハッシュ中間値が保持されているので、前のブロックのハッシュ中間値と64番目の内部状態変数値の加算処理を行い、処理結果はT45でハッシュ中間値保持部115に保持する。
T45でステップカウンタA_STP_CNTはゼロに戻し、ブロックカウンタA_BLK_CNTが2になる。A_BLK_CNTはA_BLKの値”1”を超えたのでブロックカウンタA_BLK_CNTをクリアし、DMAC Aに対してハッシュ値のデータ出力転送要求A_DMA_REQ[1]を発行する。
T46-T47でA_DMA_ACK[1]がアサートされ、MD5のハッシュ値128ビットを出力転送する。
ハッシュ処理回路100は図38のハッシュ処理100の動作フローに従い動作しST116-Aにて、MD5のハッシュ処理に必要な
・拡張メッセージ保持部107の領域0の使用要求。
・内部状態変数値保持部111の領域0の使用要求。
・MD5の処理エンジン108-1,112-1,116-1の使用要求
を取り下げ、メッセージAのハッシュ処理を完了する。使用要求が取り下げられたので使用許可A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKも取り下げられて、A_EXE=0になる(T48)。
一方、メッセージBをT05に受信したとする。CPU401はメッセージAを受信すると図37のCPUの動作フローに従い動作する。ST001において処理Aでメッセージを処理中なので、処理Bでハッシュ処理すると決定する。ST011において、ハッシュ処理回路100の処理Bレジスタ群に設定する。B_ALG(306)にSHA1を示す”01”、B_BLK(307)に”0”、B_IV(308)にSHA1のアルゴリズムで既定されている値を設定し、B_ENB(305)に”1”を設定し、ハッシュ処理の開始を要求する。ハッシュ処理回路100は処理Bの開始要求を受信すると図38のハッシュ処理回路の動作フローに従い動作しST101-Bにて、SHA1のハッシュ処理に必要な
・拡張メッセージ保持部107の領域1の使用要求。
・内部状態変数値保持部111の領域1の使用要求。
・SHA1の処理エンジンの使用要求。
を共有リソース管理部209に出す。共有リソース管理部209は、処理Aが使用していないので使用許可B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKを与え、処理が開始する。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが与えられるとB_EXEは1になる(T06)。
T06で、B_EXE=”1”、B_ALG=SHA1となる。これに応じて、メッセージ拡張処理結果選択部109はExMSG_N[63:32]の出力としてSHA1のメッセージ拡張処理部108-2の処理結果SHA1_ExMSG[31:0]を選択する。そして、ステップ処理結果選択部113はTEMP_N[255:128]の出力としてSHA1のステップ処理部112-2の処理結果SHA1_TEMP[127:0]を選択する。また、加算処理結果選択部117はIHASH_N[415:256]の出力としてSHA1の加算処理部116-1の処理結果SHA1_IHASH[159:0]を選択する。また、DMAC Bに対してデータ入力転送要求B_DMA_REQ[0]を発行する。
T07で、B_DMA_ACK[0]がアサートされると次クロックの立ち上がりからステップカウンタB_STP_CNTの更新を開始する。B_STP_CNTは毎クロックサイクル+1更新し、81までカウントするとクリアし、ゼロに戻す。
T06-T12で、最初のブロックの入力メッセージ16ワードが転送され、DMA IF部103はB_DMA_IDATA[63:0]をB_MSG[63:0]として出力する。拡張メッセージ保持データ選択部106はExMSG_1[31:0]の出力として入力メッセージであるB_MSG[31:0]を選択する。
SHA1のメッセージ拡張処理部108-2はT06-T12で拡張メッセージ保持部107の領域1を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部106は処理結果ExMSG_N[63:32]を選択しないので拡張メッセージ保持部107に保持しない。拡張メッセージ保持部107にT07-T13で1〜16番目の拡張メッセージ(入力メッセージ)を保持する。
SHA1のステップ処理部112-2はT07-T13で拡張メッセージ保持部107に保持した1〜16番目の拡張メッセージを被処理データとし、処理を行い、1〜16番目の内部状態変数値を生成する。処理結果はT08-T14で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はT06-T07でTEMP_1[255:0]にハッシュ初期値B_IV[255:0]を出力し、T08以降SHA1のステップ処理結果を選択したTEMP_N[511:256]を出力する。従ってSHA1のステップ処理部112-2は、T08で、ハッシュ初期値と1番目の入力メッセージを使って1番目の内部状態変数値を生成する。また、T09-T13で、n−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=2〜16)。
SHA1の加算処理部116-2はT08-T14で内部状態変数値保持部111に保持した1〜16番目のステップ処理データを被処理データとし、1〜16番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持データ選択部114は処理結果IHASH_N[511:256]は選択しないのでハッシュ中間値保持部115に保持しない。
T13-T32で拡張メッセージ保持データ選択部106はExMSG_1[31:0]の出力として、SHA1のメッセージ拡張処理部108-2の処理結果であるExMSG_N[63:32]を選択する。
SHA1のメッセージ拡張処理部108-2はT13-T32で拡張メッセージ保持部107領域1に保持した16ワードのデータを被処理データとし、17番目〜80番目の拡張メッセージを生成する。処理結果はT14-T33で拡張メッセージ保持部107に保持する。拡張メッセージ保持データ選択部106はSHA1の拡張処理結果を選択したExMSG_N[31:0]を出力する。そこで、SHA1のメッセージ拡張処理部108-2は、n−16番目からn−1番目の16ワードの拡張メッセージを使ってn番目の拡張メッセージを生成する(n=17〜80)。
SHA1のステップ処理部112-2はT14-T33で拡張メッセージ保持部107に保持した17〜80番目の拡張メッセージを被処理データとし、処理を行い、17〜80番目の内部状態変数値を生成する。処理結果はT15-T34で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はSHA1のステップ処理結果を選択したTEMP_N[511:256]を出力する。従ってSHA1のステップ処理部112-2は、T14-33でn−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=17〜80)。
SHA1の加算処理部116-2はT15-T34で内部状態変数値保持部111に保持した17〜80番目のステップ処理データを被処理データとし、17〜80番目の内部状態変数値に対する加算処理を行う。T34で生成した80番目の内部状態変数値に対する加算処理結果が1ブロック目のハッシュ中間値である。ハッシュ中間値保持データ選択部114はT06-T33でハッシュ初期値B_IV[255:0]を出力し、T34以降IHASH_N[255:0]を出力する。従ってSHA1の加算処理部116-2は、T34で、ハッシュ初期値と80番目の内部状態変数値の加算処理を行い、処理結果はT35でハッシュ中間値保持部115に保持する。
T35でステップカウンタB_STP_CNTはゼロに戻り、ブロックカウンタB_BLK_CNTは1になる。B_BLK_CNTはB_BLKの値”0”を超えたのでブロックカウンタB_CLK_CNTをクリアし、DMAC Bに対してハッシュ値のデータ出力転送要求B_DMA_REQ[1]を発行する。
T36-T38でB_DMA_ACK[1]がアサートされ、SHA1のハッシュ値160ビットを出力転送する。ハッシュ処理回路100は図38のハッシュ処理100の動作フローに従い動作しST116-Bにて、SHA1のハッシュ処理に必要な
・拡張メッセージ保持部107の領域1の使用要求。
・内部状態変数値保持部111の領域1の使用要求。
・SHA1の処理エンジン108-2,112-2,116-2の使用要求。
を取り下げ、メッセージBのハッシュ処理を完了する。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが下がるとB_EXE=0になる(T39)。
さらに、メッセージCを、メッセージBのハッシュ処理を完了した後で、且つ、メッセージAのハッシュ処理が完了する前に受信したとする。CPU401はメッセージAを受信すると図37のCPUの動作フローに従い動作する。ST001において処理Aでメッセージを処理中なので、処理Bでハッシュ処理すると決定する。ST011において、ハッシュ処理回路100の処理Bレジスタ群に設定する。B_ALG(306)にSHA512を示す”10”、B_BLK(307)に”7”、B_IV(308)にSHA512のアルゴリズムで既定されている値を設定し、B_ENB(305)に”1”を設定し、ハッシュ処理の開始を要求する。
ハッシュ処理回路100は処理Bの開始要求を受信すると図38のハッシュ処理回路の動作フローに従い動作し、ST101-Bにて、SHA512のハッシュ処理に必要な
・拡張メッセージ保持部107の領域0,1の使用要求。
・内部状態変数値保持部111の領域0,1の使用要求。
・SHA512の処理エンジンの使用要求。
を共有リソース管理部209に出す。共有リソース管理部209は、処理Aが拡張メッセージ保持部107の領域0、内部状態変数値保持部111の領域0を使用しているのでB_ExMSG_ACK、B_TEMP_ACKを与えない。エンジン108-3,112-3,116-3は処理Aが使用していないのでB_ENG_ACKを与える。共有リソース管理部209がB_ExMSG_ACK、B_TEMP_ACKを与えるまで処理は開始しない。
T48で処理AがメッセージAのハッシュ処理を完了し、拡張メッセージ保持部107の領域1の使用要求、内部状態変数値保持部111の領域1の使用要求を取り下げるとB_ExMSG_ACK、B_TEMP_ACKが与えられ、B_EXEは1になる。
T48ではB_EXE=”1”、B_ALG=SHA512となる。そこで、メッセージ拡張処理結果選択部109はExMSG_N[63:0]の出力としてSHA512のメッセージ拡張処理部108-3の処理結果SHA512_ExMSG[63:0]を選択する。そして、ステップ処理結果選択部113はTEMP_N[511:0]の出力としてSHA512のステップ処理部112-3の処理結果SHA512_TEMP[511:0]を選択する。また、加算処理結果選択部117はIHASH_N[511:0]の出力としてSHA512の加算処理部116-3の処理結果SHA512_IHASH[511:0]を選択する。T48でDMAC Bに対してデータ入力転送要求B_DMA_REQ[0]を発行する。
T49でB_DMA_ACK[0]がアサートされると次クロックの立ち上がりからステップカウンタB_STP_CNTの更新を開始する。B_STP_CNTは毎クロックサイクル+1更新し、81までカウントするとクリアし、ゼロに戻す。
T49-T54で、最初のブロックの入力メッセージ16ワードが転送され、DMA IF部103はB_DMA_IDATA[63:0]をB_MSG[63:0]として出力する。拡張メッセージ保持データ選択部106はExMSG_0[31:0]の出力として入力メッセージであるB_MSG[31:0]を、ExMSG_1[31:0]の出力として入力メッセージであるB_MSG[63:32]を選択する。
SHA512のメッセージ拡張処理部108-3はT49-T54で拡張メッセージ保持部107の領域0,1を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部106は処理結果ExMSG_N[63:0]を選択しないので拡張メッセージ保持部107に保持しない。拡張メッセージ保持部107にT50-T55で1〜16番目の拡張メッセージ(入力メッセージ)を保持する。
SHA512のステップ処理部112-3はT50-T55で拡張メッセージ保持部107に保持した1〜16番目の拡張メッセージを被処理データとし、処理を行い、1〜16番目の内部状態変数値を生成する。処理結果はT51-T56で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はT48-T49でTEMP_0[255:0]にハッシュ初期値の下位256ビットB_IV[255:0]を出力する。また、TEMP_1[255:0]に上位256ビットB_IV[511:256]を選択する。T50以降TEMP_0[255:0]にSHA512のステップ処理結果の下位256ビットを選択したTEMP_N[255:0]を出力する。また、TEMP_1[255:0]にSHA512のステップ処理結果の上位256ビットを選択したTEMP_N[511:256]を出力する。従ってSHA512のステップ処理部112-3は、T50で、ハッシュ初期値と1番目の入力メッセージを使って1番目の内部状態変数値を生成する。そして、T51-T55で、n−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=2〜16)。
SHA512の加算処理部116-3はT51-T56で内部状態変数値保持部111に保持した1〜16番目のステップ処理データを被処理データとし、1〜16番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持データ選択部114は処理結果IHASH_N[511:0]は選択しないのでハッシュ中間値保持部115に保持しない。
T55-T60で拡張メッセージ保持データ選択部106はExMSG_0[31:0]にSHA512のメッセージ拡張処理部108-3の処理結果の上位ビットであるExMSG_N[31:0]を出力する。また、ExMSG_1[31:0]に、SHA512のメッセージ拡張処理部108-3の処理結果の下位ビットであるExMSG_N[63:32]を出力する。
SHA512のメッセージ拡張処理部108-3はT55-T60で拡張メッセージ保持部107領域0,1に保持した16ワードのデータを被処理データとし、17番目〜80番目の拡張メッセージを生成する。処理結果はT56-T61で拡張メッセージ保持部107に保持する。拡張メッセージ保持データ選択部106は、ExMSG_0[31:0]にSHA512のメッセージ拡張処理部108-3の処理結果の上位ビットであるExMSG_N[31:0]を出力する。そして、ExMSG_1[31:0]に、SHA512のメッセージ拡張処理部108-3の処理結果の下位ビットであるExMSG_N[63:32]を出力する。これに応じて、SHA512のメッセージ拡張処理部108-3は、n−16番目からn−1番目の16ワードの拡張メッセージを使ってn番目の拡張メッセージを生成する(n=17〜80)。
SHA512のステップ処理部112-3はT56-T61で拡張メッセージ保持部107に保持した17〜80番目の拡張メッセージを被処理データとし、処理を行い、17〜80番目の内部状態変数値を生成する。処理結果はT57-T62で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110は、TEMP_0[255:0]にSHA512のステップ処理結果を選択したTEMP_N[511:0]の下位256ビットTEMP_N[255:0]を出力する。また、TEMP_1[255:0]に上位256ビットTEMP_N[511:256]を出力する。従ってSHA512のステップ処理部112-3は、T56-61でn−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=17〜80)。
SHA512の加算処理部116-3はT57-T62で内部状態変数値保持部111に保持した17〜80番目のステップ処理データを被処理データとし、17〜80番目の内部状態変数値に対する加算処理を行う。T62で生成した80番目の内部状態変数値に対する加算処理結果が1ブロック目のハッシュ中間値である。ハッシュ中間値保持データ選択部114はT48-T61でIHASH_0[255:0]にハッシュ初期値の下位256ビットB_IV[255:0]を出力し、IHASH_1[511:256]に上位256ビットB_IV[511:256]を選択する。T62以降IHASH_0[255:0]の出力としてIHASH_N[255:0]、IHASH_1[511:256]の出力としてIHASH_N[511:256]を出力する。従ってSHA512の加算処理部116-3は、T62で、ハッシュ初期値と80番目の内部状態変数値の加算処理を行い、処理結果はT63でハッシュ中間値保持部115に保持する。
T63でステップカウンタB_STP_CNTはゼロに戻し、ブロックカウンタB_BLK_CNTは1になる。B_BLK_CNTはB_BLKの値”7”を超えないのでDMAC Bに対して次ブロックのデータ入力転送要求A_DMA_REQ[0]を発行する。
ブロック数分以上の処理を同様に繰り返す。
T66で最終ブロックの80番目の内部変数値に対する加算処理結果を得、T67で処理結果をハッシュ中間値保持部115に保持する。
T67でステップカウンタB_STP_CNTはゼロに戻り、ブロックカウンタB_BLK_CNTが8になる。A_BLK_CNTはA_BLKの値”7”を超えたのでブロックカウンタB_BLK_CNTをクリアし、DMAC Bに対してハッシュ値のデータ出力転送要求B_DMA_REQ[1]を発行する。
T81-T88でB_DMA_ACK[1]がアサートされ、SHA512のハッシュ値512ビットを出力転送する。ハッシュ処理回路100は図38のハッシュ処理100の動作フローに従い動作しST116-Bにて、SHA512のハッシュ処理に必要な
・拡張メッセージ保持部107の領域0,1の使用要求。
・内部状態変数値保持部111の領域0,1の使用要求。
・SHA512の処理エンジン108-3,112-3,116-3の使用要求。
を取り下げ、メッセージCのハッシュ処理を完了する。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが下がるとB_EXE=0になる(T89)。
以上のように、上記構成はMD5,SHA1,SHA512の複数のハッシュ・アルゴリズムのメッセージを処理することが可能である。また、拡張メッセージ保持部、内部状態変数値保持部、ハッシュ中間値保持部はハッシュ・アルゴリズム毎に占有して使用しないため回路規模の増大を抑えることができる。
さらに、メッセージAとメッセージBの処理は並列に動作させることができ、共有リソースが他の処理に使われているため並列に処理することができないメッセージCは先に処理中のメッセージAの処理が終了したとき、ハッシュ処理を開始し、実行できる。
また、メッセージの処理が行われていないときにも処理エンジンは常に被処理データ領域に対して処理を行い、且つ、被処理データ領域は常に更新する。このため、特定のハッシュ・アルゴリズム処理が要求されて実行するとき、消費電力の変動を抑えることができ、耐タンパ性に優れた安全性の高いハッシュ処理装置を提供することを可能にした。
上記構成によれば、回路規模の増大を抑えながら複数の相異なるハッシュ・アルゴリズムのハッシュ処理が実行可能で、且つ、より少ない制約条件下で複数のメッセージに対するハッシュ処理を同時に実行することが可能である。さらには、どのハッシュ・アルゴリズムが選択される場合でも消費電力の変動を抑えることができ、耐タンパ性に優れた安全性の高いハッシュ処理装置を提供することができる。
また、中間値保持部は、複数のハッシュ処理部の出力データの中でビット幅が最も大きいものを格納可能である。すなわち、最大ビット幅で上記構成は実現されている。このため、処理しているハッシュアルゴリズムの特定を困難にすることができる。また、最大ビット幅を必要としないハッシュアルゴリズム処理時には、使用していないビット領域を利用することでハッシュ処理の中断再開時のオーバーヘッドを削減したり、入力ブロックの先読みにより処理を高速化したりすることができる。
ハッシュ処理回路の内部構成を示した図である。 ハッシュ処理回路を動作させるためのシステム構成の主要部分を示した図である。 ハッシュ処理システムにおける、メッセージ毎のハッシュ処理の動作フローを示した図である。 ハッシュ処理回路内のレジスタの内部構成を示した図である。 メッセージA及びBのブロック構成を示した図である。 メッセージA及びBの各ブロックの転送順序を示した図である。 ハッシュ処理システムにおける、複数のメッセージに対するハッシュ処理の動作フローを示した図である。 ハッシュ処理をステップ単位で示したタイミングチャートである。 ハッシュ処理をステップ単位で示したタイミングチャートである。 ハッシュ処理をステップ単位で示したタイミングチャートである。 ハッシュ処理をブロック単位で示したタイミングチャートである。 ハッシュ処理回路の内部構成を示した図である。 ハッシュ処理回路内のレジスタの内部構成を示した図である。 ハッシュ処理システムにおける、複数のメッセージに対するハッシュ処理の動作フローを示した図である。 ハッシュ処理をステップ単位で示したタイミングチャートである。 ハッシュ処理をステップ単位で示したタイミングチャートである。 ハッシュ処理をブロック単位で示したタイミングチャートである。 ハッシュ処理回路の内部構成を示した図である。 ハッシュ処理回路内のレジスタの内部構成を示した図である。 ハッシュ処理システムにおける、複数のメッセージに対するハッシュ処理の動作フローを示した図である。 ハッシュ処理をステップ単位で示したタイミングチャートである。 ハッシュ処理をステップ単位で示したタイミングチャートである。 ハッシュ処理をステップ単位で示したタイミングチャートである。 ハッシュ処理をブロック単位で示したタイミングチャートである。 ハッシュ処理回路の内部構成を示した図である。 ハッシュ処理回路を動作させるためのシステム構成の主要部分を示した図である。 ハッシュ処理回路内のレジスタの内部構成を示した図である。 ハッシュ処理システムにおける、複数のメッセージに対するハッシュ処理の動作フローを示した図である。 ハッシュ処理をステップ単位で示したタイミングチャートである。 ハッシュ処理をステップ単位で示したタイミングチャートである。 ハッシュ処理をステップ単位で示したタイミングチャートである。 ハッシュ処理をブロック単位で示したタイミングチャートである。 ハッシュ処理回路の構成を示した図である。 制御部の内部構成を例示する図である。 レジスタの仕様を例示する図である。 ハッシュ処理回路を動作させるためのシステムの構成例を示した図である。 ハッシュ処理システムにおける、メッセージ受信毎のCPUの動作フローを示す図である。 ハッシュ処理システムにおける、ハッシュ回路の動作フローを示す図である。 ハッシュ処理対象のメッセージを例示した図である。 ハッシュ処理の詳細を例示するタイミングチャートである。 ハッシュ処理の詳細を例示するタイミングチャートである。 インタフェース信号による動作を例示するタイミングチャートである。 ExMSG_0、ExMSG_1のデータの選択指針を例示する図である。 拡張メッセージ保持部の内部構成を例示する図である。 ExMSG_N[31:0]、ExMSG_N[63:32]のデータの選択指針を例示する図である。 TEMP_0、TEMP_1のデータの選択指針を例示する図である。 TEMP_N[255:0]、TEMP_N[511:256]のデータの選択指針を例示する図である。 IHASH_0、IHASH_1のデータの選択指針を例示する図である。 IHASH_N[255:0]、IHASH_N[511:256]のデータの選択指針を例示する図である。

Claims (10)

  1. メッセージのハッシュ値を計算するハッシュ処理装置であって、
    処理対象のメッセージから得られた拡張済みブロックを入力する入力手段と、
    入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理手段と、
    処理対象のメッセージについて前記ハッシュ処理手段が出力したハッシュ中間値を保持する複数の中間値保持手段と、
    処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力手段と、
    前記ハッシュ処理手段が出力したハッシュ中間値を保持させる中間値保持手段を切り替えて、複数のメッセージに対するハッシュ処理を制御するハッシュ処理制御手段と、
    を備えることを特徴とするハッシュ処理装置。
  2. 前記ハッシュ処理制御手段は、
    第1メッセージに対する第1の中間値保持手段を用いた処理の実行中に当該第1メッセージよりも優先度の高い第2メッセージが入力された場合、該第1メッセージに対する処理を中断して該第2メッセージに対し第2の中間値保持手段を用いて処理を開始し、該第2メッセージの処理終了後、該第1の中間値保持手段に保持した中間値を用いて該第1メッセージに対する処理を再開するように制御する
    ことを特徴とする請求項1に記載のハッシュ処理装置。
  3. 前記ハッシュ処理手段は、
    入力データに対してステップ処理を実行し、該ステップ処理された入力データを内部状態変数値として出力するステップ処理手段と、
    処理対象のブロックを前記ステップ処理手段へ入力し、所定回数のステップ処理を行わせて前記ハッシュ中間値として出力させる制御手段と、
    前記ステップ処理手段が出力した前記第1メッセージに係る内部状態変数値を保持する第1の変数値保持手段と、
    前記ステップ処理手段が出力した前記第2メッセージに係る内部状態変数値を保持する第2の変数値保持手段と、
    を備え、
    前記制御手段は、前記第1メッセージのブロックに対する処理の実行中に前記第2メッセージのブロックが入力された場合、該第1メッセージのブロックに対する処理を中断して該第2メッセージのブロックに対し前記第2の変数値保持手段を用いて処理を開始し、該第2メッセージのブロックに対する処理終了後、前記第1の変数値保持手段に保持した内部状態変数値を用いて該第1メッセージのブロックに対する処理を再開するように制御する
    ことを特徴とする請求項2に記載のハッシュ処理装置。
  4. 処理対象のメッセージのブロックに対して拡張処理を行う拡張処理手段と、
    拡張処理された前記第1メッセージのブロックを保持する第1の拡張メッセージ保持手段と、
    拡張処理された前記第2メッセージのブロックを保持する第2の拡張メッセージ保持手段と、
    をさらに備え、
    前記入力手段は、前記第1の拡張メッセージ保持手段、または、前記第2の拡張メッセージ保持手段を読み出して拡張済みブロックを入力する
    ことを特徴とする請求項3に記載のハッシュ処理装置。
  5. ハッシュアルゴリズムごとに前記ステップ処理手段および前記拡張処理手段をそれぞれ複数備え、
    使用するハッシュアルゴリズムに基づいて、動作させる前記ステップ処理手段および前記拡張処理手段を切り替える切替手段をさらに備える
    ことを特徴とする請求項4に記載のハッシュ処理装置。
  6. 前記第1の変数値保持手段と、前記第2の変数値保持手段と、前記第1の中間値保持手段と、前記第2の中間値保持手段とは、前記複数のステップ処理手段の出力データの中でビット幅が最も大きいものを格納可能である
    ことを特徴とする請求項5に記載のハッシュ処理装置。
  7. メッセージのハッシュ値を計算するハッシュ処理装置であって、
    処理対象のメッセージから得られた拡張済みブロックを入力する入力手段と、
    入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力する、ハッシュアルゴリズムごとに設けられた複数のハッシュ処理手段と、
    使用するハッシュアルゴリズムに基づいて、動作させる前記ハッシュ処理手段を切り替える切替手段と、
    処理対象のメッセージについて動作している前記ハッシュ処理手段が出力したハッシュ中間値を保持する中間値保持手段と、
    処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力手段と、
    を備えることを特徴とするハッシュ処理装置。
  8. 前記中間値保持手段は、前記複数のハッシュ処理手段の出力データの中でビット幅が最も大きいものを格納可能である
    ことを特徴とする請求項7に記載のハッシュ処理装置。
  9. メッセージのハッシュ値を計算するハッシュ処理装置のハッシュ処理方法であって、
    処理対象のメッセージから得られた拡張済みブロックを入力する入力工程と、
    入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理工程と、
    処理対象のメッセージについて前記ハッシュ処理工程において出力したハッシュ中間値を複数の保持手段のいずれかに保持させる保持工程と、
    処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力工程と、
    前記ハッシュ処理工程において出力したハッシュ中間値を保持させる保持手段を切り替えて、複数のメッセージに対するハッシュ処理を制御するハッシュ処理制御工程と、
    を有することを特徴とするハッシュ処理方法。
  10. メッセージのハッシュ値を計算するハッシュ処理装置のハッシュ処理方法であって、
    処理対象のメッセージから得られた拡張済みブロックを入力する入力工程と、
    ハッシュアルゴリズムごとに設けられた複数のハッシュ処理手段のいずれかにおいて、入力した前記ブロックに対してハッシュ処理を実行してハッシュ中間値を出力するハッシュ処理工程と、
    使用するハッシュアルゴリズムに基づいて、動作させる前記ハッシュ処理手段を切り替える切替工程と、
    処理対象のメッセージについて動作している前記ハッシュ処理工程において出力したハッシュ中間値を保持手段に保持させる保持工程と、
    処理対象のメッセージの全てのブロックに係るハッシュ中間値の和を該メッセージのハッシュ値として出力する出力工程と、
    を有することを特徴とするハッシュ処理方法。
JP2008305624A 2008-11-28 2008-11-28 ハッシュ処理装置及びその方法 Pending JP2010128392A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2008305624A JP2010128392A (ja) 2008-11-28 2008-11-28 ハッシュ処理装置及びその方法
US12/625,687 US8571207B2 (en) 2008-11-28 2009-11-25 Hash value calculation apparatus and method thereof
CN200910253338.7A CN101753291B (zh) 2008-11-28 2009-11-30 哈希值计算装置及其方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008305624A JP2010128392A (ja) 2008-11-28 2008-11-28 ハッシュ処理装置及びその方法

Publications (1)

Publication Number Publication Date
JP2010128392A true JP2010128392A (ja) 2010-06-10

Family

ID=42222823

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008305624A Pending JP2010128392A (ja) 2008-11-28 2008-11-28 ハッシュ処理装置及びその方法

Country Status (3)

Country Link
US (1) US8571207B2 (ja)
JP (1) JP2010128392A (ja)
CN (1) CN101753291B (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010154500A (ja) * 2008-11-27 2010-07-08 Canon Inc 情報処理装置
JP2014232301A (ja) * 2013-05-29 2014-12-11 韓國電子通信研究院Electronics and Telecommunications Research Institute ハッシュアルゴリズムにおける圧縮演算を行うための装置および方法
JP2015026071A (ja) * 2013-07-26 2015-02-05 韓國電子通信研究院Electronics and Telecommunications Research Institute ハッシュアルゴリズムにおける圧縮演算を行うための装置および方法

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101894229A (zh) * 2010-06-30 2010-11-24 华南理工大学 一种兼容三种sha标准的装置及其实现方法
JP2012164772A (ja) * 2011-02-04 2012-08-30 E I Du Pont De Nemours & Co 太陽電池電極作製用光硬化性導電ペースト、該ペーストを用いた太陽電池電極の作製方法及び該ペーストを用いて作製された太陽電池電極
JP5939580B2 (ja) * 2013-03-27 2016-06-22 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 匿名化データを名寄せするための名寄せシステム、並びに、その方法及びコンピュータ・プログラム
US10503732B2 (en) 2013-10-31 2019-12-10 Micro Focus Llc Storing time series data for a search query
WO2015069480A1 (en) * 2013-11-07 2015-05-14 Formation Data Systems, Inc. Multi-layer data storage virtualization using a consistent data reference model
US10423616B2 (en) 2014-04-30 2019-09-24 Hewlett Packard Enterprise Development Lp Using local memory nodes of a multicore machine to process a search query
US20160026514A1 (en) * 2014-07-23 2016-01-28 Alcatel Lucent State migration for elastic virtualized components
JP2016096422A (ja) * 2014-11-13 2016-05-26 富士通株式会社 伝送装置、フォワーディング制御方法、及び、情報処理装置
WO2016114797A1 (en) * 2015-01-16 2016-07-21 Hewlett Packard Enterprise Development Lp Shared intermediate hash values
KR101688636B1 (ko) * 2015-01-22 2016-12-21 한국전자통신연구원 고속 메시지 해싱을 위한 압축함수를 제공하는 연산 방법 및 그 장치
CN105245327A (zh) * 2015-08-21 2016-01-13 北京比特大陆科技有限公司 比特币工作量证明哈希计算芯片优化的方法、装置和电路
DE102016106871A1 (de) * 2016-04-13 2017-10-19 Infineon Technologies Ag Steuervorrichtung und Verfahren zum Sichern von Daten
US9800403B1 (en) * 2016-09-30 2017-10-24 International Business Machines Corporation Message processing using extended output functions
CN108959128B (zh) * 2018-06-04 2023-03-31 浙江大学 Crypt-SHA512加密算法的加速装置与方法
KR20200093823A (ko) * 2019-01-29 2020-08-06 삼성전자주식회사 해시 솔루션을 위한 반도체 메모리 장치 및 이의 구동방법
CN113961979A (zh) * 2021-10-25 2022-01-21 南方电网数字电网研究院有限公司 继电保护安全芯片密码服务模块及其哈希算法单元
CN115378575A (zh) * 2022-07-04 2022-11-22 广西伯汉科技有限公司 一种通用轻量哈希处理方法、系统及可储存介质
CN117807082A (zh) * 2023-12-20 2024-04-02 中科驭数(北京)科技有限公司 哈希处理方法、装置、设备及计算机可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5487130A (en) * 1977-12-23 1979-07-11 Fujitsu Ltd Conventional register access system
JPS60134940A (ja) * 1983-12-23 1985-07-18 Hitachi Ltd 情報処理装置のレジスタ選択方式
JPH03280132A (ja) * 1990-03-29 1991-12-11 Nec Corp 中央処理装置
JP2006039000A (ja) * 2004-07-23 2006-02-09 Sony Corp 暗号処理装置および暗号処理方法

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10340048A (ja) * 1997-06-06 1998-12-22 Hitachi Ltd ハッシュ値生成方法、データ暗号化方法、データ復号化方法、ハッシュ値生成装置、データ暗号化装置およびデータ復号化装置
JP4148372B2 (ja) * 1998-03-06 2008-09-10 財団法人鉄道総合技術研究所 鉄道用および舗装用の速硬性セメント系の注入材とコンクリート
US7184549B2 (en) * 2000-01-14 2007-02-27 Mitsubishi Denki Kabushiki Kaisha Method and apparatus for encryption, method and apparatus for decryption, and computer-readable medium storing program
US7177421B2 (en) * 2000-04-13 2007-02-13 Broadcom Corporation Authentication engine architecture and method
US7299355B2 (en) * 2001-01-12 2007-11-20 Broadcom Corporation Fast SHA1 implementation
US7249255B2 (en) * 2001-06-13 2007-07-24 Corrent Corporation Apparatus and method for a hash processing system using multiple hash storage areas
JP4226816B2 (ja) * 2001-09-28 2009-02-18 株式会社東芝 マイクロプロセッサ
JP3921424B2 (ja) 2002-07-17 2007-05-30 富士通株式会社 ハッシュ関数処理回路
US7925891B2 (en) * 2003-04-18 2011-04-12 Via Technologies, Inc. Apparatus and method for employing cryptographic functions to generate a message digest
US7921300B2 (en) * 2003-10-10 2011-04-05 Via Technologies, Inc. Apparatus and method for secure hash algorithm
US7599489B1 (en) * 2004-02-09 2009-10-06 Sun Microsystems Inc. Accelerating cryptographic hash computations
US7720219B1 (en) * 2004-10-19 2010-05-18 Oracle America, Inc. Apparatus and method for implementing a hash algorithm word buffer
DE602005015482D1 (de) * 2004-12-08 2009-08-27 Ge Aviat Systems Llc System und verfahren zur erhöhten fehlererkennung in speicherperipherien
EP1866797A4 (en) * 2005-03-16 2010-08-04 Guidance Software Inc SYSTEM AND METHOD FOR SEARCHING FOR STATIC DATA IN A COMPUTER INVESTIGATION SYSTEM
US20070245159A1 (en) * 2006-04-18 2007-10-18 Oracle International Corporation Hash function strengthening
US7908411B2 (en) * 2006-09-20 2011-03-15 Panasonic Corporation Data transfer device and mobile telephone
JP4308840B2 (ja) * 2006-11-08 2009-08-05 Okiセミコンダクタ株式会社 Sha演算方法およびsha演算装置
KR100901697B1 (ko) * 2007-07-09 2009-06-08 한국전자통신연구원 저전력 sha-1 해쉬 연산 장치 및 이를 이용한 저전력hmac 암호 장치
US7970128B2 (en) * 2007-07-20 2011-06-28 Freescale Semiconductor, Inc. Systems and methods for efficient generation of hash values of varying bit widths

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5487130A (en) * 1977-12-23 1979-07-11 Fujitsu Ltd Conventional register access system
JPS60134940A (ja) * 1983-12-23 1985-07-18 Hitachi Ltd 情報処理装置のレジスタ選択方式
JPH03280132A (ja) * 1990-03-29 1991-12-11 Nec Corp 中央処理装置
JP2006039000A (ja) * 2004-07-23 2006-02-09 Sony Corp 暗号処理装置および暗号処理方法

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
CSNG200501093028; 佐藤証,井上忠宣: 'ハッシュ関数のハードウェア性能比較' コンピュータセキュリティシンポジウム2004論文集 Volume II of II, 20041020, p.613-618 *
CSNG200700881005; 廣瀬勝一: 'ハッシュ関数の構成と証明可能安全性' 電子情報通信学会誌 第90巻 第6号, 20070601, p.447-450 *
JPN6013028602; 佐藤証,井上忠宣: 'ハッシュ関数のハードウェア性能比較' コンピュータセキュリティシンポジウム2004論文集 Volume II of II, 20041020, p.613-618 *
JPN6013028603; Ryan Glabb, et al.: 'Multi-mode operator for SHA-2 hash functions' JOURNAL OF SYSTEMS ARCHITECTURE Vol.53 No.2-3, 2007, p.127-138 *
JPN6013042383; 廣瀬勝一: 'ハッシュ関数の構成と証明可能安全性' 電子情報通信学会誌 第90巻 第6号, 20070601, p.447-450 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010154500A (ja) * 2008-11-27 2010-07-08 Canon Inc 情報処理装置
JP2014232301A (ja) * 2013-05-29 2014-12-11 韓國電子通信研究院Electronics and Telecommunications Research Institute ハッシュアルゴリズムにおける圧縮演算を行うための装置および方法
US9288041B2 (en) 2013-05-29 2016-03-15 Electronics And Telecommunications Research Institute Apparatus and method for performing compression operation in hash algorithm
JP2015026071A (ja) * 2013-07-26 2015-02-05 韓國電子通信研究院Electronics and Telecommunications Research Institute ハッシュアルゴリズムにおける圧縮演算を行うための装置および方法
US9479193B2 (en) 2013-07-26 2016-10-25 Electronics And Telecommunications Research Institute Apparatus and method for performing compression operation in hash algorithm

Also Published As

Publication number Publication date
CN101753291B (zh) 2012-11-28
CN101753291A (zh) 2010-06-23
US20100135484A1 (en) 2010-06-03
US8571207B2 (en) 2013-10-29

Similar Documents

Publication Publication Date Title
JP2010128392A (ja) ハッシュ処理装置及びその方法
US9552498B2 (en) On-chip storage, creation, and manipulation of an encryption key
US8413153B2 (en) Methods and systems for sharing common job information
US6477646B1 (en) Security chip architecture and implementations for cryptography acceleration
US6735642B2 (en) DMA doorbell
JP4337675B2 (ja) 暗号処理装置および暗号処理方法
US6775764B1 (en) Search function for data lookup
KR20150143708A (ko) 스토리지 디바이스 보조 인라인 암호화 및 암호해독
JP2008500638A (ja) 暗号化オペレーションをサポートする複数のレジスタを備えたデータムーバコントローラ
JP2012090286A (ja) イン−ストリームデータ暗号化/復号の機能を有するメモリシステム
JP2013214050A (ja) ランダム値生成方法およびシステム
US20160048455A1 (en) Memory Data Transfer Method and System
US20240070263A1 (en) Security defending method and electronic apparatus
CN112631772A (zh) 密码运算方法、处理器、装置及存储介质
JP2008524969A5 (ja)
US20100070750A1 (en) Image processing apparatus and program starting up method
JP2011142411A (ja) 暗号化処理装置
WO2023070925A1 (zh) 区块链交易池的分片方法、系统、存储介质和计算机系统
JP5967967B2 (ja) 情報処理装置およびその制御方法
JP5482472B2 (ja) データ転送装置およびデータ転送方法
KR20060081440A (ko) 데이터 처리장치 및 방법
CN115292236B (zh) 一种基于高速接口多核加速方法及装置
US20240073197A1 (en) Security defending method, coprocessor, and processing apparatus
US20240179009A1 (en) Apparatus and method for performing authenticated encryption with associated data operation of encrypted instruction with corresponding golden tag stored in memory device in event of cache miss
JP2002175265A (ja) 直接メモリ・アクセス・コントローラを有するディジタル信号プロセッサにおける複数の構成素子間での信号群交換装置および方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111116

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130531

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130614

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130807

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20130826