(57)【要約】【課題】本発明はＳＨＡアルゴリズム基盤のメッセージスケジュール演算方法、メッセージ圧縮演算方法及びこれを行う暗号装置に関するものである。【解決手段】本発明はメッセージスケジュール演算を行う時、１つの加算器を利用して順次にメッセージスケジュール演算を行う。また、メッセージスケジュールを演算する時に入力される演算データを貯蔵するメモリを１７番目ラウンドからはメッセージスケジュール演算によって生成される中間データを貯蔵するために使用する。さらに、本発明はメッセージ圧縮演算を行う時にも１つの加算器を利用して順次にメッセージ圧縮演算を行う。【選択図】図１
2010107947.tif 000002
【特許請求の範囲】
【請求項１】
ＳＨＡアルゴリズム基盤の暗号装置において、
１つの加算器を含み、第１ラウンド前には入力される演算データのうちの一部データを各ラウンド別中間データとして出力し、前記第１ラウンドからは前記加算器を利用して第１中間データに対してＳＨＡアルゴリズムの第１演算関数を行った結果値、第２中間データに対して前記ＳＨＡアルゴリズムの第２演算関数を行った結果値、第３中間データ及び第４中間データを複数の段階にかけて既に設定された順に合算して各ラウンド別中間データとして出力するメッセージスケジュール部;及び
前記メッセージスケジュール部で各ラウンド別に出力される中間データを利用したメッセージ圧縮演算を行って、ハッシュ演算の最終結果データを生成するメッセージ圧縮部
を含む暗号装置。
【請求項２】
前記メッセージスケジュール部及び前記メッセージ圧縮部の演算遂行順と結果貯蔵過程を制御するための制御信号を出力する制御部をさらに含むことを特徴とする、請求項１に記載の暗号装置。
【請求項３】
前記メッセージスケジュール部は、
前記入力されるデータの大きさと同一な大きさを有し、前記制御部の制御信号に基づいて前記第１ラウンド前には前記入力される演算データを各ラウンド別中間データとして貯蔵し、前記第１ラウンドからは前記メッセージスケジュール部で各ラウンド別に出力される中間データを貯蔵するメモリ;及び
前記制御部の制御信号に基づいて前記第１ラウンド前には前記入力される演算データを選択して前記メモリに出力し、前記第１ラウンドからは前記メッセージスケジュール部で各ラウンド別に出力される中間データを選択して前記メモリに出力する第１マルチプレクサーをさらに含むことを特徴とする、請求項２に記載の暗号装置。
【請求項４】
前記メモリは、
前記制御部の制御信号に基づいて前記第１ラウンド前には前記入力される演算データのうちの一部データを各ラウンド別中間データとして出力し、前記第１ラウンドからは各段階別に前記第１中間データ、前記第２中間データ、前記第３中間データ及び前記第４中間データのうちの１つを出力することを特徴とする、請求項３に記載の暗号装置。
【請求項５】
前記メッセージスケジュール部は、
前記メモリから出力される前記第１中間データに対して前記第１演算関数を行った結果値を出力する第１演算関数演算部;及び
前記メモリから出力される前記第２中間データに対して前記第２演算関数を行った結果値を出力する第２演算関数演算部をさらに含むことを特徴とする、請求項４に記載の暗号装置。
【請求項６】
前記メッセージスケジュール部は、
前記制御部の制御信号に基づいて前記第１ラウンドからは各段階別に前記第１演算関数演算部の出力値、前記第２演算関数演算部の出力値及び前記メモリから出力される前記第３中間データのうちの１つを選択して前記加算器に出力する第２マルチプレクサーをさらに含むことを特徴とする、請求項５に記載の暗号装置。
【請求項７】
前記メッセージスケジュール部は、
前記制御部の制御信号に基づいて前記第１ラウンド前には前記メモリから出力される各ラウンド別中間データを選択して出力し、前記第１ラウンドからは各段階別に前記メモリから出力される前記第４中間データ及び前記加算器の出力値のうちの１つを選択して出力する第３マルチプレクサー;及び
前記第３マルチプレクサーの出力値を貯蔵し、貯蔵された値を前記メモリ及び前記加算器に出力するレジスターをさらに含むことを特徴とする、請求項６に記載の暗号装置。
【請求項８】
前記ＳＨＡアルゴリズムはＳＨＡ-２５６アルゴリズムであることを特徴とする、請求項１乃至７のいずれかに記載の暗号装置。
【請求項９】
ＳＨＡアルゴリズム基盤の暗号装置において、
入力される演算データを利用して各ラウンド別中間データを生成して出力するメッセージスケジュール部;及び
１つの加算器及び複数のレジスターを含み、ハッシュ演算が開始されると前記複数のレジスターに複数の初期値をロードし、初期値ロードが完了するとメッセージ圧縮演算の各ラウンド別に前記複数のレジスターに貯蔵された値、前記複数のレジスターに貯蔵された値を利用してハッシュ演算の演算関数をそれぞれ行った結果値、前記中間データ及びラウンド定数を複数の段階にかけて既に設定された順に前記加算器を利用して合算し、前記加算器で合算した値を利用して前記複数のレジスターに貯蔵された値を更新し、前記複数のラウンドにかけて行われるメッセージ圧縮演算が完了すると、前記複数の初期値と前記複数のレジスターに貯蔵された値を合算して最終結果データを生成する圧縮部を含むことを特徴とする暗号装置。
【請求項１０】
前記メッセージスケジュール部及び前記メッセージ圧縮部の演算遂行順と結果貯蔵過程を制御するための制御信号を出力する制御部をさらに含むことを特徴とする、請求項９に記載の暗号装置。
【請求項１１】
前記メッセージ圧縮部は、
前記複数のレジスターのうちのｅレジスター、ｆレジスター及びｇレジスターに貯蔵された値を利用して前記演算関数のうちの第１演算関数を行った結果値を出力する第１演算関数演算部;
前記ｅレジスターに貯蔵された値を利用して前記演算関数のうちの第２演算関数を行った結果値を出力する第２演算関数演算部;
前記複数のレジスターのうちのａレジスター、ｂレジスター及びｃレジスターに貯蔵された値を利用して前記演算関数のうちの第３演算関数を行った結果値を出力する第３演算関数演算部;及び
前記ａレジスターに貯蔵された値を利用して前記演算関数のうちの第４演算関数を行った結果値を出力する第４演算関数演算部を含むことを特徴とする、請求項９に記載の暗号装置。
【請求項１２】
前記メッセージ圧縮部は、
前記複数の初期値と前記ラウンド定数を貯蔵し、前記制御部の制御信号に基づいて前記複数の初期値を前記複数のレジスターにロードする間には前記複数の初期値を順次に出力し、前記メッセージ圧縮演算の各ラウンド別に対応する前記ラウンド定数を出力し、前記複数のラウンドにかけて行われるメッセージ圧縮演算が完了すると前記複数の初期値を順次に出力するメモリをさらに含むことを特徴とする、請求項１１に記載の暗号装置。
【請求項１３】
前記メッセージ圧縮部は、
前記複数の初期値を前記複数のレジスターにロードする間には前記メモリから出力される初期値を選択して出力し、前記メッセージ圧縮演算の各ラウンド別に前記第１演算関数演算部の出力値、前記第２演算関数演算部の出力値、前記第３演算関数演算部の出力値、前記複数のレジスターのうちのｄレジスターに貯蔵された値、前記中間データ及び前記ラウンド定数のうちの１つを各段階別に選択して出力し、前記複数のラウンドにかけて行われるメッセージ圧縮演算が完了すると前記メモリから出力される初期値を選択して出力するマルチプレクサーをさらに含み、
前記加算器は、前記複数のレジスターのうちのｈレジスターに貯蔵された値と前記マルチプレクサーの出力値を合算して前記ａレジスター、前記ｄレジスター及び前記ｈレジスターに出力することを特徴とする、請求項１２に記載の暗号装置。
【請求項１４】
前記複数のレジスターはシフトレジスターであることを特徴とする、請求項９乃至１３のうちのいずれかに記載の暗号装置。
【請求項１５】
ＳＨＡアルゴリズム基盤の暗号装置のメッセージスケジュール演算方法において
演算データが入力されると、前記演算データを複数のブロックに分類して前記演算データと同一な大きさのメモリに貯蔵する段階;
第１ラウンド前には前記メモリに貯蔵された複数のブロックを前記第１ラウンド前の各ラウンド別中間データとして順次に出力する段階;及び
前記第１ラウンドからは各ラウンド別に前の第１ラウンドで出力された第１中間データに対してＳＨＡアルゴリズムの第１演算関数を行った結果値、前の第２ラウンドから出力された第２中間データに対して前記ＳＨＡアルゴリズムの第２演算関数を行った結果値、前の第３ラウンド及び第４ラウンドから出力された第３中間データ及び第４中間データを１つの加算器を利用して複数の段階にかけて既に設定された順に合算して前記第１ラウンドからの各ラウンド別中間データを出力する段階を含むことを特徴とする方法。
【請求項１６】
前記第１ラウンドからの各ラウンド別中間データは前記メモリに順次に貯蔵され、前記第１中間データ、前記第２中間データ、前記第３中間データ及び前記第４中間データは前記メモリから出力されることを特徴とする、請求項１５に記載の方法。
【請求項１７】
前記第１ラウンドからの各ラウンド別中間データを出力する段階は、
前記加算器によって前記第３中間データ及び前記第１演算関数を行った結果値を合算した第１結果値を出力する段階;
前記加算器によって前記第１結果値に前記第４中間データを合算した第２結果値を出力する段階;及び
前記加算器によって前記第２結果値に前記第２演算関数を行った結果値を合算した第３結果値を出力する段階を含み、
前記第３結果値が対応するラウンドの中間データであることを特徴とする、請求項１６に記載の方法。
【請求項１８】
ＳＨＡアルゴリズム基盤の暗号装置のメッセージスケジュール演算によって生成された各ラウンド別中間データを利用して第１演算関数、第２演算関数、第３演算関数及び第４演算関数を含むメッセージ圧縮演算を行う方法において、
複数の初期値を第１レジスター、第２レジスター及び第３レジスターを含む複数のレジスターにロードする段階;
前記第１レジスターに貯蔵された値、前記複数のレジスターのうちの一部レジスターを利用して前記第１演算関数、第２演算関数、第３演算関数及び第４演算関数をそれぞれ行った結果値、対応するラウンドの中間データ及びラウンド定数を１つの加算器を利用して複数の段階にかけて既に設定された順に合算し、各段階別に前記加算器を利用して合算した結果値を前記第１レジスター、前記第２レジスター及び前記第３レジスターのうちの１つに選択的に貯蔵する段階;
前記複数のレジスターのうちの前記第３レジスターを除いた残りレジスターに貯蔵された値を隣接するレジスターに１段階ずつシフトして貯蔵する段階;
前記選択的に貯蔵する段階及び前記シフトして貯蔵する段階を複数のラウンドにかけて反復的に行う段階;及び
前記複数のレジスターに貯蔵された値と前記複数の初期値を合算してハッシュ演算の最終結果データを出力する段階を含むことを特徴とする方法。
【請求項１９】
前記選択的に貯蔵する段階は、
前記第１レジスターに貯蔵された値、前記第１演算関数及び第２演算関数をそれぞれ行った結果値、対応する中間データ及びラウンド定数を１つの加算器を利用して複数の段階にかけて既に設定された順に合算した第１結果値を前記第１レジスターに貯蔵する段階;
前記第２レジスターに貯蔵された値と前記第１レジスターに貯蔵された値を前記加算器を利用して合算した第２結果値を前記第２レジスターに貯蔵する段階;
前記第３演算関数を行った結果値に前記第１レジスターに貯蔵された値を前記加算器を利用して合算した第３結果値を前記第１レジスターに貯蔵する段階;及び
前記第４演算関数を行った結果値に前記第１レジスターに貯蔵された値を前記加算器を利用して合算した第４結果値を前記第３レジスターに貯蔵する段階を含むことを特徴とする、請求項１８に記載の方法。
【請求項２０】
前記ロードする段階は、
前記複数の初期値のうちの１つを前記第３レジスターに貯蔵し、前記複数のレジスターのうちの前記第３レジスターを除いた残りレジスターに貯蔵された値を隣接するレジスターに１段階ずつシフトして貯蔵する過程を前記複数のレジスターの数だけ繰り返して行う段階であることを特徴とする、請求項１９に記載の方法。
【請求項２１】
前記出力する段階は、
前記複数の初期値のうちの１つと前記第１レジスターに貯蔵された値を前記加算器を利用して合算した値を前記第３レジスターに貯蔵し、前記複数のレジスターのうちの前記第３レジスターを除いた残りレジスターに貯蔵された値を隣接するレジスターに１段階ずつシフトして貯蔵する過程を前記複数のレジスターの数だけ繰り返して行う段階;及び
前記複数のレジスターに貯蔵された値を前記最終結果データとして出力する段階を含むことを特徴とする、請求項１９に記載の方法。
【請求項２２】
前記複数のレジスターに貯蔵された前記最終結果データは次のメッセージ圧縮演算の初期値として使用されることを特徴とする、請求項２１に記載の方法。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はＳＨＡアルゴリズム基盤のメッセージスケジュール演算方法、メッセージ圧縮演算方法及びこれを行う暗号装置に関し、特に、ＳＨＡ-２５６基盤のメッセージスケジュール演算方法、メッセージ圧縮演算方法及びこれを行う暗号装置に関するものである。
【０００２】
本発明は知識経済部及び情報通信研究振興員のＩＴ成長動力事業の一環として行った研究から導き出されたものである[課題管理番号:２００６-Ｓ-０４１-０３、課題名:次世代モバイル端末器の保安及び信頼サービスのための共通保安核心モジュール開発]。
【背景技術】
【０００３】
最近急速な無線ネットワーク技術の発展と共にデジタル情報社会が高度化されて電子商取引が活性化することによって、暗号技術は高速インタネット網を基づく社会、経済的活動の安全性と信頼性、使用者プライバシー保護などのための核心技術として認識されている。特に、モバイルフォンのような移動用プラットホームは適切な保安措置がなければハッカーや他の悪意のあるプログラムの攻撃対象になり得る。
【０００４】
信頼コンピューティンググループ（Ｔｒｕｓｔｅｄ Ｃｏｍｐｕｔｉｎｇ Ｇｒｏｕｐ、ＴＣＧ）のモバイルフォンワーキンググループ（Ｍｏｂｉｌｅ Ｐｈｏｎｅ Ｗｏｒｋｉｎｇ Ｇｒｏｕｐ、ＭＰＷＧ）は特にＴＣＧの保安規格をモバイルフォン装置に適するように拡張する作業を行っている。このような保安規格でモバイルフォンのための必須保安モジュールであるモバイル信頼モジュール（Ｍｏｂｉｌｅ Ｔｒｕｓｔｅｄ Ｍｏｄｕｌｅ、ＭＴＭ）は当該プラットホームの無欠陥性を測定し、これを検証する作業を行うためにキーを使用しないＳＨＡ-１（ｓｅｃｕｒｅ ｈａｓｈ ａｌｇｏｒｉｔｈｍ-１）ハッシュ関数を使用するように指定している。しかし、最近は安定したハッシュ関数の使用のためにＳＨＡ-２５６の使用を勧告及び明示している。このような暗号パラダイムの変化を反映してＴＣＧでは現在進行しているＴＰＭの次期バージョンの標準であるＴＰＭ ＮＥＸＴにはＳＨＡ-２５６の使用を明示している。
【０００５】
大部分のモバイルデバイスの場合、メモリと使用可能な電源及びコンピューティング能力に限界があるので、ＴＣＧのこのような保安規格をモバイルフォンに適用するには色々技術的難しさを伴う。特に、モバイルフォンの場合、バッテリーの容量に限界があるため、このような制約要因の中で消費電力に大きな影響を受ける。したがって、低面積で低電力のＳＨＡ-２５６暗号回路の設計技術が必要である。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が目的とする技術的課題は、小底面積で低電力のハードウェア構造を有するＳＨＡアルゴリズム基盤のメッセージスケジュール演算方法、メッセージ圧縮演算方法及びこれを行う暗号装置を提供することにある。
【課題を解決するための手段】
【０００７】
前記目的を達成するための本発明の特徴によるＳＨＡアルゴリズム基盤の暗号装置は、１つの加算器を含み、第１ラウンド前には入力される演算データのうちの一部データを各ラウンド別中間データとして出力し、前記第１ラウンドからは前記加算器を利用し第１中間データに対してＳＨＡアルゴリズムの第１演算関数を行った結果値、第２中間データに対して前記ＳＨＡアルゴリズムの第２演算関数を行った結果値、第３中間データ及び第４中間データを複数の段階にかけて既に設定された順に合算して各ラウンド別中間データとして出力するメッセージスケジュール部;及び、前記メッセージスケジュール部から各ラウンド別に出力される中間データを利用したメッセージ圧縮演算を行ってハッシュ演算の最終結果データを生成するメッセージ圧縮部を含む。
【０００８】
また、本発明の他の特徴によるＳＨＡアルゴリズム基盤の暗号装置は、入力される演算データを利用して各ラウンド別中間データを生成して出力するメッセージスケジュール部;及び１つの加算器及び複数のレジスターを含み、ハッシュ演算が開始されると前記複数のレジスターに複数の初期値をロードし、初期値ロードが完了するとメッセージ圧縮演算の各ラウンド別に、前記複数のレジスターに貯蔵された値、前記複数のレジスターに貯蔵された値を利用してハッシュ演算の演算関数をそれぞれ行った結果値、前記中間データ及びラウンド定数を複数の段階にかけて既に設定された順に前記加算器によって合算し、前記加算器によって合算した値を利用して前記複数のレジスターに貯蔵された値を更新し、前記複数のラウンドにかけて行われるメッセージ圧縮演算が完了すると前記複数の初期値と前記複数のレジスターに貯蔵された値を合算して最終結果データを生成する圧縮部を含む。
【０００９】
また、本発明の他の特徴によるＳＨＡアルゴリズム基盤の暗号装置のメッセージスケジュール演算方法は、演算データが入力されると前記演算データを複数のブロックに分類して前記演算データと同一な大きさのメモリに貯蔵する段階;第１ラウンド前には前記メモリに貯蔵された複数のブロックを前記第１ラウンド前の各ラウンド別中間データとして順次に出力する段階;及び前記第１ラウンドからは各ラウンド別に前の第１ラウンドから出力された第１中間データに対してＳＨＡアルゴリズムの第１演算関数を行った結果値、
前の第２ラウンドから出力された第２中間データに対して前記ＳＨＡアルゴリズムの第２演算関数を行った結果値、前の第３ラウンド及び第４ラウンドから出力された第３中間データ及び第４中間データを１つの加算器を利用して複数の段階にかけて既に設定された順に合算して前記第１ラウンドからの各ラウンド別中間データを出力する段階を含む。
【００１０】
また、本発明の他の特徴によるＳＨＡアルゴリズム基盤の暗号装置のメッセージスケジュール演算によって生成された各ラウンド別中間データを利用して第１演算関数、第２演算関数、第３演算関数及び第４演算関数を含むメッセージ圧縮演算を行う方法は、複数の初期値を第１レジスター、第２レジスター及び第３レジスターを含む複数のレジスターにロードする段階;前記第１レジスターに貯蔵された値、前記複数のレジスターのうちの一部レジスターを利用して前記第１演算関数、第２演算関数、第３演算関数及び第４演算関数をそれぞれ行った結果値、対応するラウンドの中間データ及びラウンド定数を１つの加算器を利用して複数の段階にかけて既に設定された順に合算し、各段階別に前記加算器を利用して合算した結果値を前記第１レジスター、前記第２レジスター及び前記第３レジスターのうちの１つに選択的に貯蔵する段階;前記複数のレジスターのうちの前記第３レジスターを除いた残りレジスターに貯蔵された値を隣接するレジスターに１段階ずつシフトして貯蔵する段階;前記選択的に貯蔵する段階及び前記シフトして貯蔵する段階を複数のラウンドにかけて反復的に行う段階;及び前記複数のレジスターに貯蔵された値と前記複数の初期値を合算してハッシュ演算の最終結果データを出力する段階を含む。
【発明の効果】
【００１１】
本発明によると、小底面積で低電力構造を有するＳＨＡアルゴリズム基盤の暗号装置を提供する。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施例によるＳＨＡ-２５６暗号装置を示す構造図である。
【図２】本発明の実施例によるメッセージスケジュール部を示す詳細図である。
【図３】本発明の実施例によるメッセージ圧縮部を示す詳細図である。
【図４】本発明の実施例によるＳＨＡ-２５６暗号装置のメッセージスケジュール演算方法を示す流れ図である。
【図５】本発明の実施例によるＳＨＡ-２５６暗号装置のメッセージ圧縮演算方法を示す流れ図である。
【発明を実施するための形態】
【００１３】
以下、添付した図面を参照して本発明の実施例について本発明が属する技術分野における通常の知識を有する者が容易に実施できるように詳しく説明する。しかし、本発明は多用で相異なる形態で実現することができ、ここで説明する実施例に限られない。また、図面で本発明を明確に説明するために説明上不要な部分は省略し、明細書全体にわたって類似の部分については類似の図面符号を付けた。
【００１４】
明細書全体においてある部分がある構成要素を“含む”とする時、これは特に反対になる記載のない限り他の構成要素を除くことではなく他の構成要素をさらに含むことを意味する。また、明細書に記載された“…部”、“…器”などの用語は少なくとも１つの機能や動作を処理する単位を意味し、この単位はハードウェアやソフトウェアまたはハードウェア及びソフトウェアの結合で実現される。
【００１５】
次に、以下では本発明の実施例によるＳＨＡ（Ｓｅｃｕｒｅ Ｈａｓｈ Ａｌｇｏｒｉｔｈｍ）アルゴリズム基盤の暗号化方法及び暗号装置について図面を参照して詳細に説明する。特に、本発明の実施例ではＳＨＡ-２５６基盤の暗号化方法及び暗号装置を例に上げて説明する。
【００１６】
本発明の実施例について説明する前に、まず、ハッシュアルゴリズムであるＳＨＡ-２５６アルゴリズムについて詳細に説明する。
【００１７】
まず、ＳＨＡ-２５６アルゴリズムは最大２６４ビット長さのメッセージの入力を受けて２５６ビットの圧縮メッセージ（ｍｅｓｓａｇｅ ｄｉｇｅｓｔ）を出力するハッシュ演算を示す。ＳＨＡ-２５６アルゴリズムでは１回のハッシュ演算を行うために５１２ビットを基本単位にして演算を行い、１つの５１２ビットの演算データに対するハッシュ演算のために内部的に６４ラウンドにわたって演算を行う。ＳＨＡ-２５６アルゴリズムは圧縮メッセージを計算するために次の数式１のように３２ビットに基づく６種類の演算関数を使用する。
［数式１］
【数１】
2010107947.tif 000003
【００１８】
ＳＨＡ-２５６アルゴリズムは大きく分けてメッセージスケジュール演算とメッセージ圧縮演算で実現される。メッセージスケジュール演算は次の数式２のように前述した数式１のσ０（）関数とσ１（）関数を利用して入力される５１２ビットの演算データから６４ラウンドにかけて行われるメッセージ圧縮演算に必要な３２ビットの中間データを生成する。
［数式２］
【数２】
2010107947.tif 000004
ここで、Ｍｔはメッセージ圧縮演算の入力として使用されるｔ番目ラウンドの３２ビット中間データを意味する。数式２を参照すると、メッセージスケジュールを演算する時、初期１６番目ラウンドまでは入力される５１２ビットの演算データを１６個のブロックに分類した３２ビットのデータを順次に中間データとして出力し、残りラウンドでは数式１の演算関数（σ０、σ１）を使用して毎ラウンドごとに新たな３２ビット中間データを計算して出力する。
【００１９】
暗号装置でこのようなメッセージスケジュール演算を行うためには一般に入力される５１２ビットの演算データを貯蔵するための５１２ビットのメモリと１６個のシフトレジスターが必要である。このような構造の暗号化装置は初期１６番目ラウンドまでのメッセージスケジュールを演算する時には５１２ビットの演算データが貯蔵された５１２メモリから３２ビットのデータを直ちに読み込んで中間データとして出力し、残りラウンドでは毎ラウンドごとに新たな３２ビットの中間データを計算して使用する。したがって、入力される５１２ビットの演算データを貯蔵するために使用される５１２ビットのメモリは初期１６番目ラウンドまでのメッセージスケジュール演算のために使用され、残りラウンドのメッセージスケジュール演算ではそれ以上使用しない状態に放置される。このような暗号装置は回路面積と消費電力の側面から過剰に資源（ｒｅｓｏｕｒｃｅ）を浪費する構造であるため、低電力、小底面積特性を必要とするモバイルフォンや他の低電力エンベデッドシステムに適用するには困難がある。
【００２０】
一方、メッセージ圧縮演算は次の数式３のように数式１の
【数３】
2010107947.tif 000005
Ｃｈ（）、Ｍａｊ（）関数を利用してメッセージスケジュール演算によって生成された３２ビットの中間データに対するメッセージ圧縮演算を６４ラウンドにかけて繰り返して行う。
［数式３］
【数４】
2010107947.tif 000006
ここで、Ｗｔはメッセージスケジュール演算によって毎ラウンドごとに出力される３２ビットの中間データを示し、ＫｔはＳＨＡ-２５６アルゴリズムで定義するラウンド定数であって３２ビットで表現される。また、ａ、ｂ、ｃ、ｄ、ｅ、ｆ、ｇ、ｈはメッセージ圧縮演算に使用される変数を示し、これら変数は各ラウンドごとに１段階ずつシフト移動したり或いは既に決められている演算によってそれぞれ異なる値を貯蔵する。
【００２１】
数式３を参照すると、メッセージ圧縮演算のためには７回の３２ビット加算演算が必要である。したがって、暗号化装置でメッセージ圧縮演算のために最も多い回路面積を占めるのは加算器となる。このように、複数の加算演算のためにいくつかの加算器を使用する場合、高速のメッセージ圧縮演算は可能であるが、暗号装置の回路面積と消費電力が増加してモバイルフォンや他の低電力エンベデッドシステムに使用することはできない。
【００２２】
図１は本発明の実施例によるＳＨＡ-２５６基盤の暗号装置１００を示す構造図である。
【００２３】
図１を参照すると、ＳＨＡ-２５６基盤の暗号装置１００はインターフェース部１０１、制御部１０２、メッセージスケジュール部１０３及びメッセージ圧縮部１０４を含む。
【００２４】
インターフェース部１０１は暗号装置１００が使用されるシステムのシステムバス（Ｓｙｓｔｅｍ ｂｕｓ）に連結され、システムバスから暗号装置１００に入力される演算データ及び制御命令を受信する。また、ＳＨＡ-２５６演算の結果データと演算の終了を知らせるインタラプタ（ｉｎｔｅｒｒｕｐｔｅｒ）信号またはポリング（ｐｏｌｌｉｎｇ）信号をシステムバスを通じてシステムに伝送する機能を行う。
【００２５】
一方、インターフェース部１０１はシステムバスを通じてシステムが伝送した制御命令を受信すると、これをインターフェース部内の制御レジスターに貯蔵する。このように制御レジスターに貯蔵された制御命令は制御部１０２で参照して暗号装置１００の駆動に必要な制御信号を発生するのに使用される。ここで、制御レジスターの各ビットは暗号装置１００の動作を制御するために既に定義された値を使用する。
【００２６】
また、インターフェース部１０１はシステムバスを通じてシステムが伝送した演算データが入力されると、制御部１０２の制御信号に基づいて入力された演算データをメッセージスケジュール部１０３内の第１メモリに貯蔵する。ここで、制御部１０２は演算データをメッセージスケジュール部１０３内の第１メモリに貯蔵するための貯蔵経路を設定する制御信号をインターフェース部１０１に印加する。
【００２７】
制御部１０２は暗号装置１００の全般的なデータ流れを制御する。
【００２８】
まず、制御部１０２はＳＨＡ-２５６演算の遂行のためにメッセージスケジュール部１０３とメッセージ圧縮部１０４の内部モジュールの駆動に必要な演算遂行順と演算結果貯蔵過程を６４ラウンドにわたって制御する。
【００２９】
また、制御部１０２はインターフェース部１０１を通じたデータの入力と出力を制御し、インターフェース部１０１に入力されるデータのアドレスに基づいて当該データが制御命令であるか演算データであるかを判別する。そして、入力されるデータが制御命令である場合、これを制御レジスターに貯蔵するようにインターフェース部１０１を制御し、制御レジスターに貯蔵された制御命令を分析して暗号装置１００で行うべき演算の種類を判別する。そして、行うべき演算を行うように暗号装置１００状態遷移を制御する。
【００３０】
これに反し、入力されるデータが演算データである場合、制御部１０２はこれをメッセージスケジュール部１０３内の第１メモリに貯蔵するようにインターフェース部１０１を制御する。ここで、制御部１０２は制御信号を通じて入力される演算データが貯蔵される第１メモリ内アドレス及び演算データの貯蔵順などを制御する。
【００３１】
メッセージスケジュール部１０３は第１メモリを含み、インターフェース部１０１を通じて入力される演算データを第１メモリに貯蔵し、入力される演算データを利用して全体６４ラウンドにかけてメッセージ圧縮演算を行うために必要な３２ビットの中間データを生成してメッセージ圧縮部１０４に伝達する。
【００３２】
メッセージ圧縮部１０４はメッセージ圧縮演算、つまり、ＳＨＡ-２５６ハッシュ演算を行い、メッセージスケジュール部１０３から入力される３２ビットの中間データに対する６４ラウンドの演算を行い、最終結果データを内部レジスターに貯蔵する。
【００３３】
図２は本発明の実施例によるメッセージスケジュール部１０３を示す詳細図である。
【００３４】
図２を参照すると、メッセージスケジュール部１０３は第１メモリ２０１、第１演算関数演算部２０２、第２演算関数演算部２０３、第１加算器２０４及びレジスター２０５を含む。また、第１マルチプレクサー２０６、第２マルチプレクサー２０７、第３マルチプレクサー２０８をさらに含むことができる。
【００３５】
第１メモリ２０１は５１２ビットの大きさを有し、１６番目ラウンドまではメッセージスケジュール部１０３に入力される５１２ビットの演算データを１６個のブロックに分類して貯蔵し、１７番目ラウンドからは演算データの代わりにメッセージスケジュール部１０３から出力される３２ビットの中間データとして順次に貯蔵する。ここで、１６番目ラウンドまでは演算データに含まれた１６個の３２ビットデータが中間データとして順次に出力されるので、演算データが直ちに中間データとなる。したがって、１６番目ラウンドまでは演算データをメッセージスケジュール部１０３から出力される中間データに更新する必要がない。
【００３６】
第１演算関数演算部２０２は１７番目ラウンドから前述した数式２に基づいて第１メモリ２０１に貯蔵された中間データのうちの（ｔ-１５）番目ラウンドから出力された中間データに対して第１演算関数（σ０）を行って出力する。ここで、ｔは現在ラウンドが何番目ラウンドであるかを示す。
【００３７】
第２演算関数演算部２０３は１７番目ラウンドから前述した数式３に基づいて第１メモリ２０１に貯蔵された中間データのうちの（ｔ-２）番目ラウンドから出力された中間データに対して第２演算関数（σ１）を行って出力する。
【００３８】
第１加算器２０４は１７番目ラウンドから各ラウンド別に複数の段階にかけて（ｔ-１６）番目ラウンドから出力された中間データ、第１演算関数演算部２０２から出力される出力値、（ｔ-７）番目ラウンドから出力された中間データ及び第２演算関数演算部２０３から出力される出力値を既に設定された順に順次に合算して出力する。このために、第１加算器２０４で複数の段階別に合算される合算値はレジスター２０５に貯蔵され、レジスター２０５に貯蔵された合算値は次の段階で再び第１加算器２０４に入力されて合算に使用される。
【００３９】
例えば、第１段階では第１加算器２０４を通じて（ｔ-１６）番目ラウンドから出力された中間データが入力され、第１加算器２０４は（ｔ-１６）番目ラウンドで出力された中間データを出力する。第１加算器２０４から出力された（ｔ-１６）番目ラウンドの中間データはレジスター２０５に貯蔵されて次の段階で第１加算器２０４に出力される。したがって、第２段階では第１演算関数演算部２０２から出力される出力値と（ｔ-１６）番目ラウンドの中間データが合算されて出力される。そして、この合算値はレジスター２０５に貯蔵されて再び次の段階で第１加算器２０４に出力される。このような方法で、第１加算器２０４は第３段階では（ｔ-１６）番目ラウンドの中間データ及び第１ロジック関数演算部２０２の出力値を合算した結果に（ｔ-７）番目ラウンドの中間データを合算して出力し、第４段階では（ｔ-１６）番目ラウンドの中間データ、第１ロジック関数演算部２０２の出力値及び（ｔ-７）番目ラウンドの中間データを合算した結果に第２演算関数２０３の出力値を合算して最終的に当該ラウンドの中間データを出力する。
【００４０】
レジスター２０５には、第１メモリ２０１から出力される中間データと各ラウンドごとに第１加算器２０４から出力される段階別合算値を貯蔵する。つまり、１６番目ラウンドまでは各ラウンド別に第１メモリ２０１から出力される中間データを貯蔵し、１７番目ラウンド後には各段階別にメッセージスケジュール演算のために第１メモリ２０１から出力される直前ラウンドの中間データと第１加算器２０４で各段階別に出力される合算値のうちの１つを貯蔵する。ここで、各ラウンドの最後段階でレジスター２０５に貯蔵される値は当該ラウンドの中間データとなる。
【００４１】
第１マルチプレクサー２０６はメッセージスケジュール部１０３に入力される５１２ビットの演算データとレジスター２０５から出力される各ラウンド別中間データのうちの１つを選択して第１メモリ２０１に出力する。つまり、１６番目ラウンドまでは入力される５１２ビットの演算データを第１メモリ２０１に出力し、１７番目ラウンドからは各ラウンド別に最終的に生成された中間データをレジスター２０５から読み込んで第１メモリ２０１に出力する。
【００４２】
第２マルチプレクサー２０７は１７番目ラウンド後から各段階別に入力される値の中で（ｔ-１６）番目ラウンドの中間データ、第１演算関数演算部２０２の出力値、（ｔ-７）番目ラウンドの中間データ及び第２演算関数演算部２０３の出力値のうちの１つを選択して出力する。
【００４３】
第３マルチプレクサー２０８は第１メモリ２０１から出力される中間データと第１加算器２０４の出力値のうちの１つを選択してレジスター２０５に出力する。つまり、１６番目ラウンドまでは第１メモリ２０１から順次に出力される３２ビットのデータをレジスター２０５に出力し、１７番目ラウンドからは各段階別に出力される第１加算器２０４の出力値をレジスター２０５に出力する。
【００４４】
次の表１は前述したメッセージスケジュール部１０３の各構成要素の動作に基づいて各ラウンド別遂行結果を示したものである。表１でｘ表示はいずれの値でも全体演算に関係ない値（Ｄｏｎ'ｔ ｃａｒｅ）であることを意味する。
【表１】
2010107947.tif 000007
【００４５】
一方、前述したメッセージスケジュール演算を行うためにメッセージスケジュール部１０３の第１メモリ２０１は制御部１０２の制御信号に基づいて第１メモリ２０１にデータを貯蔵したり第１メモリ２０１に貯蔵されたデータを出力する。また、第１マルチプレクサー２０６、第２マルチプレクサー２０７及び第３マルチプレックス２０８は制御部１０２の制御信号に基づいて入力されるデータのうちの１つを選択して出力する。
【００４６】
図３は本発明の実施例によるメッセージ圧縮部１０４を示す構造図である。
【００４７】
図３を参照すると、メッセージ圧縮部１０４は第２メモリ３０１、８個のレジスター（ａ、ｂ、ｃ、ｄ、ｅ、ｆ、ｇ、ｈ）３０２〜３０９、第３演算関数演算部３１０、第４演算関数演算部３１１、第５演算関数演算部３１２、第６演算関数演算部３１３、第２加算器３１４、第４マルチプレクサー３１５、第５マルチプレクサー３１６及び第６マルチプレクサー３１７を含む。
【００４８】
第２メモリ１０４はメッセージ圧縮演算に使用される初期値（Ｈ０〜Ｈ７）及びラウンド定数（Ｋｔ）を貯蔵する。ここで、ラウンド定数（Ｋｊ）はルックアップテーブル（Ｌｏｏｋ Ｕｐ Ｔａｂｌｅ）形態で貯蔵される。
【００４９】
複数のレジスター３０２〜３０９はシフトレジスターで構成され、メッセージ圧縮演算で使用される変数が貯蔵される。まず、ＳＨＡ-２５６ハッシュ演算が開始されると複数のレジスター３０２〜３０９には初期値（Ｈ０〜Ｈ７）が貯蔵される。そして、各ラウンド別にメッセージ圧縮演算中に発生する中間値が貯蔵され、６４ラウンドにかけたメッセージ圧縮演算が完了されると、メッセージ圧縮演算による最終結果データが貯蔵される。
【００５０】
第３演算関数演算部３１０はｅレジスター３０５、ｆレジスター３０６及びｇレジスター３０７に貯蔵された値に対して第３演算関数（Ｃｈ（，，））を行って出力する。
【００５１】
第４演算関数演算部３１１はｅレジスター３０５に貯蔵された値に対して第４演算関数
【数５】
2010107947.tif 000008
を行って出力する。
【００５２】
第５演算関数演算部３１２はａレジスター３０２、ｂレジスター３０３及びｃレジスター３０４に貯蔵された値に対して第５演算関数（Ｍａｊ（，，））を行って出力する。
【００５３】
第６演算関数演算部３１３はａレジスター３０２に貯蔵された値に対して第６演算関数
【数６】
2010107947.tif 000009
を行って出力する。
【００５４】
第２加算器３１４は初期値ロードの時には毎クロックサイクルごとに第２メモリ３０１から出力される初期値をａレジスター３０２に出力して初期値がシフトされて対応するレジスターに貯蔵させる。また、メッセージ圧縮演算の毎ラウンドごとに複数の段階にかけてｈレジスター３０９に貯蔵された初期値（Ｈ７）、第３演算関数演算部３１０の出力値（Ｃｈ（ｅ、ｆ、ｇ））、当該ラウンドのラウンド定数（Ｋｊ）、第４演算関数演算部３１１の出力値
【数７】
2010107947.tif 000010
、当該ラウンドのメッセージスケジュール演算による中間データ（Ｗｊ）、ｄレジスター３０５に貯蔵された初期値（Ｈ４）、第５演算関数演算部３１２の出力値（Ｍａｊ（ａ、ｂ、ｊ））及び第６演算関数演算部３１３の出力値
【数８】
2010107947.tif 000011
を順次に合算して出力する。この時、各段階ごとに第２加算器３１４から出力された値はｈレジスター３０９、ｄレジスター３０５及びａレジスター３０４のうちの１つに選択的に貯蔵される。また、６４ラウンドにかけたメッセージ圧縮演算が行われると、第２メモリ３０１から出力される初期値とこれに対応するレジスターに貯蔵された値を合算してａレジスター３０２に出力して各レジスターに貯蔵された初期値を更新する。
【００５５】
第４マルチプレクサー３１５はｃレジスター３０４から出力される値と第２加算器３１４の出力のうちの１つを選択してｄレジスター３０５に出力する。初期値を各レジスターにロードしたり６４ラウンドにかけてメッセージ圧縮演算を行って獲得した最終結果データを各レジスターに貯蔵する過程ではｃレジスター３０４から出力されるデータを選択する。これに反し、毎ラウンドごとに複数の段階を経てメッセージ圧縮演算を行う間には第２加算器３１４から出力される値を選択して出力する。
【００５６】
第５マルチプレクサー３１６はｇレジスター３０８から出力される値と第２加算器３１４の出力のうちの１つを選択してｈレジスター３０５に出力する。初期値を各レジスターにロードしたり６４ラウンドにわたってメッセージ圧縮演算を行って獲得した最終結果データを各レジスターに貯蔵する過程ではｇレジスター３０４から出力されるデータを選択して出力する。反面、毎ラウンドごとに複数の段階を経てメッセージ圧縮演算を行う間には第２加算器３１４から出力される値を選択して出力する。
【００５７】
第６レジスター３１７は前述した数式３に基づいてメッセージ圧縮演算の各段階別に第３演算関数演算部３１０、第４演算関数演算部３１１、第５演算関数演算部３１２、第６演算関数演算部３１３から出力される出力値、第２メモリ３０１から出力される初期値及びラウンド定数のうちの１つを選択して第２加算器３１４に出力する。
【００５８】
次の表２は前述したメッセージ圧縮部１０４の各構成要素の動作に基づいて各ラウンド別遂行結果を示したものである。
【表２】
2010107947.tif 000012
【００５９】
表２を参照すると、第２加算器３１４で各段階別に順次に合算された値は各段階別にｈレジスター３０９、ｄレジスター３０５、ａレジスター３０２のうちの１つに貯蔵される。
【００６０】
一方、前述のように動作するために制御部１０２は前述した数式３のメッセージ圧縮演算を基準にメッセージ圧縮部１０４を制御するための制御信号を出力する。その結果、第２メモリ３０２は制御部１０２の制御信号に基づいて第２メモリ３０２に貯蔵された初期値またはラウンド定数を出力したり、初期値を更新する。また、第４マルチプレクサー３１５、第５マルチプレクサー３１６及び第６マルチプレクサー３１７は制御部１０２の制御信号に基づいて入力される値のうちの１つを選択して出力する。
【００６１】
図４は本発明の実施例によるメッセージスケジュール部１０３のメッセージスケジュール演算方法を示す流れ図である。
【００６２】
図４までを全体的に参照すると、まず、 メッセージスケジュール部１０３に５１２ビットの演算データが入力されると、第１マルチプレクサー２０６は５１２ビットの演算データを第１メモリ２０１に出力し、第１メモリ２０１は５１２ビットが１６個のブロックに分かれた３２ビットのデータを順次に貯蔵するように制御する。
【００６３】
その後、メッセージスケジュール部１０３は初期１６番目ラウンドまで（ｔ≦１６）は第１メモリ２０１に貯蔵された３２ビットのデータを各ラウンド別中間データに順次に出力する（Ｓ１０１、Ｓ１０２）。このために、第１メモリ２０１は制御部１０２の制御信号に基づいて３２ビットのデータを順次に出力し、第２マルチプレクサー２０７は第１メモリ２０１から出力されるデータをレジスター２０５に出力する。したがって、レジスター２０５は第２マルチプレクサー２０７から出力されるデータを貯蔵し、その後、レジスター２０５に貯蔵された中間データはメッセージ圧縮部１０４の入力データとして使用される。このように、初期１６番目ラウンドまで中間データを出力するためには単純に第１メモリ２０１からデータを読み込む作業のみ行えば良いので、各ラウンド別に１クロックサイクルだけの時間を要する。一方、メッセージ演算部１０３の構成要素のうちの第１メモリ２０１、レジスター２０５及び第２マルチプレクサー２０７を除いた残り構成要素は初期１６番目ラウンドまでは入力値に関係なく動作する。つまり、中間データ決定にいかなる影響も与えない。
【００６４】
１７番目ラウンドから６４番目ラウンドまでのメッセージスケジュール部１０３は、各ラウンド別に複数の段階にかけてメッセージスケジュール演算を行って中間データを出力し（Ｓ１０３）、生成された中間データを第１メモリ２０１に順次に貯蔵する過程を繰り返して行う（Ｓ１０４、Ｓ１０５）。
【００６５】
ここで、メッセージスケジュール演算は全４段階にわたって行われ、第１加算器２０４を利用して各段階別に（ｔ-１６）番目ラウンドで出力された中間データ（Ｍｔ-１６）、（ｔ-１５）番目ラウンドから出力された中間データに対する第１演算関数（σ０）演算を行った結果値（σ０（Ｍｔ-１５））、（ｔ-７）番目ラウンドで出力された中間データ（Ｍｔ-７）、そして（ｔ-２）番目ラウンドで出力された中間データ（Ｍｔ-２）に対する第２演算関数（σ１）演算を行った結果値（σ１（Ｍｔ-２））を順次に合算して出力する。一方、メッセージスケジュール演算の各段階別には１クロックサイクルずつかかるので、各ラウンド別メッセージスケジュール演算のために全４クロックサイクルがかかる。
【００６６】
第１段階で、第１メモリ２０１は（ｔ-１６）番目ラウンドで出力された中間データ（Ｍｔ-１６）を出力し、第３マルチプレクサー２０８はこれをレジスター２０５に出力する。したがって、第１段階では（ｔ-１６）番目ラウンドで出力された中間データがレジスター２０５に貯蔵され、レジスター２０５に貯蔵された値は次の段階で第１加算器２０４に入力される。例えば、１７番目ラウンドの場合、第１段階では第１ラウンドで出力された中間データ（Ｍ１）が結果値としてレジスター２０５に貯蔵され、この値は第２段階で第１加算器２０４の入力として出力される。
【００６７】
第２段階で、第１メモリ２０１は（ｔ-１５）番目ラウンドで出力された中間データを出力する。また、第１演算関数演算部２０２は（ｔ-１５）番目ラウンドで出力された中間データに対する第１演算関数（σ０）を行った結果値（σ０（Ｍｔ-１５））を出力し、第２マルチプレクサー２０７はこれを第１加算器２０４に出力する。その結果、第１加算器２０４は直前段階で出力された結果値（Ｍｔ-１６）と第１演算関数演算部２０２から出力される出力値（σ０（Ｍｔ-１５））を合算して出力する。また、第１加算器２０４から出力された値（Ｍｔ-１６＋σ０（Ｍｔ-１５））は第３マルチプレクサー２０８を通じてレジスター２０５に貯蔵され、レジスター２０５に貯蔵された値は次の段階で第１加算器２０４に入力される。例えば、１７番目ラウンドの場合、第２段階ではＭ１とσ０（２）を合算した値（Ｍ１＋σ０（Ｍ２））がレジスター２０５に貯蔵され、この値は第３段階で第１加算器２０４に出力される。
【００６８】
第３段階で、第１メモリ２０１は（ｔ-７）番目ラウンドで出力された中間データ（Ｍｔ-７）を出力し、第２マルチプレクサー２０７はこれを第１加算器２０４に出力する。その結果、第１加算器２０４は直前段階で出力された結果値（Ｍｔ-１６＋σ０（Ｍｔ-１５））と（ｔ-７）番目ラウンドで出力された中間データ（Ｍｔ-７）を合算して出力する。また、第１加算器２０４から出力された値（Ｍｔ-１６＋σ０（Ｍｔ-１５）＋Ｍｔ-７）は第３マルチプレクサー２０８を通じてレジスター２０５に貯蔵され、レジスター２０５に貯蔵された値は次の段階で第１加算器２０４の入力として入力される。例えば、１７番目ラウンドでは、第３段階では（Ｍ１＋σ０（Ｍ２））とＭ１０を合算した値（Ｍ１＋σ０（Ｍ２）＋Ｍ１０）がレジスター２０５に貯蔵され、この値は第３段階で第１加算器２０４に出力される。
【００６９】
第４段階で、第１メモリ２０１は（ｔ-２）番目ラウンドで出力された中間データ（Ｍｔ-２）を出力し、第２演算関数演算部２０３はこの値に対する第２演算関数（σ１）演算を行って出力する。第２演算関数演算部２０３から出力された値（σ１（Ｍｔ-２））は第２マルチプレクサー２０７によって第１加算器２０４に出力され、第１加算器２０４は第２演算関数演算部２０３から出力された値（σ１（Ｍｔ-２））と直前段階で出力された値（Ｍｔ-１６＋σ０（Ｍｔ-１５）＋Ｍｔ-７）を合算して出力する。また、第１加算器２０４から出力された値（Ｍｔ-１６＋σ０（Ｍｔ-１５）＋Ｍｔ-７＋σ１（Ｍｔ-２））は第３マルチプレクサー２０８を通じてレジスター２０５に貯蔵され、レジスター２０５に貯蔵された値は当該ラウンドの中間データとして使用される。つまり、第４段階でレジスター２０４に貯蔵された値（Ｍｔ-１６＋σ０（Ｍｔ-１５）＋Ｍｔ-７＋σ１（Ｍｔ-２））は当該ラウンドの中間データとしてメッセージ圧縮部１０４で使用され、次のラウンドでのメッセージスケジュール演算のために第１メモリ２０１に貯蔵される。例えば、１７番目ラウンドの場合、第４段階では（Ｍ１＋σ０（Ｍ２）＋Ｍ１０）とσ１（Ｍ１５）を合算した値（Ｍ１＋σ０（Ｍ２）＋Ｍ１０＋σ１（Ｍ１５）））がレジスター２０５に貯蔵され、この値は１７番目ラウンドの最終中間データとなる。
【００７０】
一方、各ラウンド別に生成された中間データのうちの１７番目ラウンドから生成された中間データは第１メモリ２０１に順次に貯蔵される。ここで、１６番目ラウンドまで出力された中間データはメッセージスケジュール部１０３に入力された５１２ビットの演算データを３２ビットのデータに分類した１６個のブロックと順次に一致するので、別途の貯蔵過程は省略する。一方、１７番目ラウンドから生成された中間データは５１２ビットデータを分類した１６個のブロックのうちの（ｉ ｍｏｄ １６）番目ブロックが貯蔵された第１メモリ２０１のアドレスに上書きされる。
【００７１】
一方、前述したメッセージスケジュール部１０３で第１メモリ２０１のデータを読み書きするための制御信号と各マルチプレクサー（２０６、２０７、２０８）から入力されるデータのうちの１つを選択するようにする制御信号は制御部１０２から出力される。ここで、第１メモリ２０１を制御するための制御信号は読取り（ｒｅａｄ）/書込み（ｗｒｉｔｅ）選択信号と対応する第１メモリのアドレスを含む。
【００７２】
前述のように、本発明の実施例ではメッセージスケジュール部１０３を実現するために５１２ビット第１メモリ、第１加算器、レジスターをそれぞれ１つずつ使用する。したがって、メッセージスケジュール演算に使用されるメモリの活用度を高め、ハードウェア面積及び消費電力を最少化する効果がある。
【００７３】
図５は本発明の実施例によるメッセージ圧縮部１０４のメッセージ圧縮演算方法を示す流れ図である。
【００７４】
図５を参照すると、ＳＨＡ-２５６ハッシュ演算が開始されると、まず、メッセージ圧縮部１０４は第２メモリ３０１に貯蔵された既初期値（Ｈ０〜Ｈ７）を複数のレジスター（ａ〜ｈ）３０２乃至３０９に順次にロードする（Ｓ２０１）。ここで、初期値を複数のレジスター（３０２乃至３０９）に順次にロードするためには全８クロックサイクルがかかり、各レジスターはシフトレジスターで駆動して毎クロックサイクルごとにレジスターに貯蔵された値を隣接するレジスターにシフトさせるシフト演算を行う。
【００７５】
これをより詳しく参照するとまず、第２メモリ３０１は制御部１０２の制御信号に基づいて毎クロックサイクルごとに第２メモリ３０１に貯蔵された初期値を順次に出力する。
【００７６】
つまり、第２メモリ３０１は第１クロックサイクルでは初期値のうちのＨ７を出力し、その後、毎クロックサイクルごとにＨ６、Ｈ５、…、Ｈ０順に初期値を順次に出力する。このように出力された初期値は第６マルチプレクサー３１７及び第２加算器３１４を経てａレジスター３０２に出力される。そして、直前にａ〜ｇレジスターに貯蔵された値はｂ〜ｈレジスターにそれぞれ１段階ずつシフトされて貯蔵される。
【００７７】
したがって、第１クロックサイクルではａレジスター３０２にＨ７が貯蔵され、残りレジスターには０が貯蔵され、第２クロックａレジスター３０２にＨ６が貯蔵され、ｂレジスター３０３にはＨ７が貯蔵される。そして、最終的に８クロックサイクルが経過すると、各レジスターにはａ=Ｈ０、ｂ=Ｈ１、ｃ=Ｈ２、…、ｈ=Ｈ７のように初期値がロードされる。
【００７８】
前述のように各レジスターに初期値をロードする過程が終わると、メッセージ圧縮部１０４は６４ラウンドにわたってメッセージスケジュール部１０３から入力される３２ビットの中間データを利用して数式３のようにメッセージ圧縮演算を行う（Ｓ２０２）。ここで、各ラウンド別メッセージ圧縮演算は全７段階にわたって行われ、第２加算器３１４を利用してｈレジスター３０９に貯蔵された初期値（ａ）、第３演算関数演算部３１０の出力値（Ｃｈ（ｅ、ｆ、ｇ））、ラウンド定数（Ｋｊ）、第４演算関数演算部３１１の出力値
【数９】
2010107947.tif 000013
、当該ラウンドのメッセージスケジュール演算による中間データ（Ｗｊ）、ｄレジスター３０５に貯蔵された初期値（ｄ）、第５演算関数演算部３１２の出力値（Ｍａｊ（ａ、ｂ、ｃ））及び第６演算関数演算部３１３の出力値
【数１０】
2010107947.tif 000014
を順次に合算する。
【００７９】
そして、合算結果をｈレジスター３０９、ｄレジスター３０５及びａレジスター３０２のうちの１つに選択的に貯蔵する。一方、メッセージ圧縮演算の各段階別に１クロックサイクルずつかかるので、各ラウンド別メッセージ圧縮演算のために全７クロックサイクルがかかる。
【００８０】
第１段階で、第２加算器３１４はｈレジスター３０９に貯蔵された初期値（ｈ）と第３演算関数演算部３１０の出力値（Ｃｈ（ｅ、ｆ、ｇ））を合算して出力し、この合算値（ｈ+Ｃｈ（ｅ、ｆ、ｇ））はｈレジスター３０９に貯蔵される。このために、第６マルチプレクサー３１７は入力される値の中で第３演算関数演算部３１０の出力値（Ｃｈ（ｅ、ｆ、ｇ））を選択して第２加算器３１４に出力し、第５マルチプレクサー３１６は入力される値の中で第２加算器３１４から出力される値をｈレジスター３０９に出力する。
【００８１】
第２段階で、第２加算器３１４は直前段階でｈレジスター３０９に貯蔵された値（ｈ+Ｃｈ（ｅ、ｆ、ｇ））とラウンド定数（Ｋｊ）を合算して出力し、この合算値（ｈ+Ｃｈ（ｅ、ｆ、ｇ）+Ｋｊ）はｈレジスター３０９に貯蔵される。ここで、ラウンド定数（Ｋｊ）各ラウンドに対応する定数で、第２メモリ３０１にルックアップテーブル形態で貯蔵される。したがって、第２メモリ３０１は制御部１０２の制御信号に基づいて当該ラウンドに対応するラウンド定数（Ｋｊ）を出力し、第６マルチプレクサー３１７は入力される値のうちの第２メモリ３０１から出力される値（Ｋｊ）を選択して第２加算器３１４に出力する。したがって第２加算器３１４はｈレジスター３０９に貯蔵された値（ｈ+Ｃｈ（ｅ、ｆ、ｇ））と第６マルチプレクサー３１７から出力される値（Ｋｊ）を合算して出力し、この値（ｈ+Ｃｈ（ｅ、ｆ、ｇ）+Ｋｊ）は第５マルチプレクサー３１６を通じてｈレジスター３０９に貯蔵される。
【００８２】
第３段階で、第２加算器３１４は直前段階でｈレジスター３０９に貯蔵された値（ｈ+Ｃｈ（ｅ、ｆ、ｇ）+Ｋｊ）と第４演算関数演算部３１１から出力される値
【数１１】
2010107947.tif 000015
を合算して出力し、この合算値
【数１２】
2010107947.tif 000016
はｈレジスター３０９に貯蔵される。これのために、第６マルチプレクサー３１７は入力される値のうちの第４演算関数演算部３１１から出力される値
【数１３】
2010107947.tif 000017
を選択して第２加算器３１４に出力し、第２加算器３１４はｈレジスター３０９に貯蔵された値（ｈ+Ｃｈ（ｅ、ｆ、ｇ）+Ｋｊ）と第６マルチプレクサー３１７から出力される値
【数１４】
2010107947.tif 000018
を合算して出力する。そして、第２加算器３１４で合算された値
【数１５】
2010107947.tif 000019
は第５マルチプレクサー３１６を通じてｈレジスター３０９に貯蔵される。
【００８３】
第４段階で、第２加算器３１４は直前段階でｈレジスター３０９に貯蔵された値
【数１６】
2010107947.tif 000020
とメッセージスケジュール部１０３から入力される中間データ（Ｗｊ）を合算して出力し、この合算値
【数１７】
2010107947.tif 000021
はｈレジスター３０９に貯蔵される。このために、第６マルチプレクサー３１７は入力される値のうちのメッセージスケジュール部１０３から入力される中間データ（Ｗｊ）を選択して第２加算器３１４に出力し、第２加算器３１４はｈレジスター３０９に貯蔵された値
【数１８】
2010107947.tif 000022
と第６マルチプレクサー３１７から出力される値（Ｗｊ）を合算して出力する。そして、第２加算器３１４で合算された値
【数１９】
2010107947.tif 000023
は第５マルチプレクサー３１６を通じてｈレジスター３０９に貯蔵される。
【００８４】
ここで、第２加算器３１４がメッセージ圧縮演算の第４段階、つまり、第４クロックサイクルにメッセージスケジュール部１０３から出力される中間データ（Ｗｊ）を合算したことは、メッセージスケジュール部１０３で中間データ（Ｗｊ）を計算するために全４クロックサイクルを所要する時間的特性を考慮したことである。メッセージ圧縮部１０４で各ラウンド別メッセージ圧縮演算を行うのに全７クロックサイクルが必要であるので、メッセージスケジュール部１０３で中間データ（Ｗｊ）を計算するのに十分な時間が保障される。したがって、本発明の実施例ではメッセージスケジュール部１０３で中間データ（Ｗｊ）を計算するために別途のクロックがさらに必要でなく、メッセージスケジュール演算とメッセージ圧縮演算を同時に行うことが可能である。
【００８５】
一方、本発明の実施例ではメッセージ圧縮演算を行う時に各ラウンド別に第４段階でメッセージスケジュール部１０３から出力される中間データを合算するか、本発明では第４段階の後の段階でメッセージスケジュール部１０３から出力される中間データを合算することもまた可能である。
【００８６】
第５段階で、第２加算器３１４は直前段階でｈレジスター３０９に貯蔵された値
【数２０】
2010107947.tif 000024
とｄレジスター３０５に貯蔵された初期値（ｄ）を合算して出力し、この合算値
【数２１】
2010107947.tif 000025
はｄレジスター３０５に貯蔵される。このために、第６マルチプレクサー３１７は入力される値のうちのｄレジスター３０５から入力される値（ｄ）を選択して第２加算器３１４に出力し、第２加算器３１４はｈレジスター３０９に貯蔵された値
【数２２】
2010107947.tif 000026
と第６マルチプレクサー３１７から出力される値（ｄ）を合算して出力する。そして、第２加算器３１４で合算された値
【数２３】
2010107947.tif 000027
は第４マルチプレクサー３１５を通じてｄレジスター３０５に貯蔵される。
【００８７】
一方、第５段階でｈレジスター３０９は第２加算器３１４から出力される値を貯蔵しない。つまり、第５段階が行われた後、ｈレジスター３０９には直前段階で貯蔵された値
【数２４】
2010107947.tif 000028
が維持され、ｄレジスター３０５には第２加算器３１４の出力値
【数２５】
2010107947.tif 000029
が貯蔵される。これは、数式３のｅ=ｄ+Ｔ１を行うためのもので、ｄレジスター３０５に貯蔵された値はメッセージ圧縮演算の最後段階でｅレジスター３０６にシフトされる。
【００８８】
第６段階で、第２加算器３１４は直前段階でｈレジスター３０９に貯蔵された値
【数２６】
2010107947.tif 000030
と第５演算関数演算部３１２から出力される値（Ｍａｊ（ａ、ｂ、ｃ））を合算して出力し、この合算値
【数２７】
2010107947.tif 000031
はｈレジスター３０９に貯蔵される。このために、第６マルチプレクサー３１７は入力される値のうちの第５演算関数演算部３１２から出力される値（Ｍａｊ（ａ、ｂ、ｃ））を選択して第２加算器３１４に出力し、第２加算器３１４はｈレジスター３０９に貯蔵された値
【数２８】
2010107947.tif 000032
と第６マルチプレクサー３１７から出力される値（Ｍａｊ（ａ、ｂ、ｃ））を合算して出力する。そして、第２加算器３１４で合算された値
【数２９】
2010107947.tif 000033
は第５マルチプレクサー３１６を通じてｈレジスター３０９に貯蔵される。
【００８９】
第７段階で、第２加算器３１４は直前段階でｈレジスター３０９に貯蔵された値
【数３０】
2010107947.tif 000034
と第６演算関数演算部３１３から出力される値
【数３１】
2010107947.tif 000035
を合算して出力し、この合算値
【数３２】
2010107947.tif 000036
はａレジスター３０２に貯蔵される。このために、第６マルチプレクサー３１７は入力される値のうちの第６演算関数演算部３１３から出力される値
【数３３】
2010107947.tif 000037
を選択して第２加算器３１４に出力し、第２加算器３１４はｈレジスター３０９に貯蔵された値
【数３４】
2010107947.tif 000038
と第６マルチプレクサー３１７から出力される値
【数３５】
2010107947.tif 000039
を合算して出力する。そして、第２加算器３１４で合算された値
【数３６】
2010107947.tif 000040
はａレジスター３０２に貯蔵される。ここで、第２加算器３１４から出力された値
【数３７】
2010107947.tif 000041
がａレジスター３０２に貯蔵されると同時に、各レジスターに前に貯蔵された値が１つずつシフトされて貯蔵される。つまり、ａレジスター３０２に貯蔵された値はｂレジスター３０３に、ｂレジスター３０３に貯蔵された値はｃレジスター３０４にシフトされる。また、第４マルチプレクサー３１５を通じてｃレジスター３０４に貯蔵された値はｄレジスター３０５にシフトされ、第５段階でｄレジスター３０５に貯蔵された値
【数３８】
2010107947.tif 000042
はｅレジスター３０６にシフトされる。また、ｅレジスター３０６に貯蔵された値はｆレジスター３０７にシフトされ、ｆレジスター３０７に貯蔵された値はｇレジスター３０８にシフトされ、ｇレジスター３０８に貯蔵された値は第５マルチプレクサー３１６を通じてｈレジスター３０９にシフトされる。
【００９０】
前述した７段階のメッセージ圧縮演算は６４ラウンドにわたって繰り返され、６４ラウンドのメッセージ圧縮演算が完了すると各レジスターにはメッセージ圧縮演算による中間値が貯蔵される。
【００９１】
このように、６４ラウンドにわたってすべてのメッセージ圧縮演算が完了されると、ＳＨＡ-２５６演算の最終結果データを得るためにメッセージ圧縮部１０４は次の数式４のように初期値を更新し、更新された初期値を各レジスターにロードする（Ｓ２０３）。
［数式４］
【数３９】
2010107947.tif 000043
【００９２】
このような初期値更新過程は初期に８クロックサイクルにかけて各レジスターに初期値をロードする過程と同一に行われる。ただし、初期値ロードの時には各レジスターらが全て‘０'に初期化された状態であったが、初期値更新の時には各レジスターに６４ラウンドにかけたメッセージ圧縮演算の結果である中間値が貯蔵されている差がある。
【００９３】
初期値更新過程をより詳しく参照するとまず、第２メモリ３０１は制御部１０２の制御信号に基づいて毎クロックサイクルごとに第２メモリ３０１に貯蔵された初期値を順次に出力する。つまり、第２メモリ３０１は第１クロックサイクルでは初期値のうちのＨ７を出力し、その後、毎クロックサイクルごとにＨ６、Ｈ５、…、Ｈ０順に初期値を順次に出力する。また、第４マルチプレクサー３１５は入力される値の中で第２メモリ３０１から出力される値を第２加算器３１４に出力し、第２加算器３１４は毎クロックサイクルごとに第２メモリ３０１から出力される値とｈレジスター３０９に貯蔵された値を合算してａレジスター３０２に出力する。ここで、第２加算器３１４から出力された値がａレジスター３０２に貯蔵されると同時に、直前にａ〜ｇレジスターに貯蔵された値はｂ〜ｈレジスターにそれぞれ１段階ずつシフトされて貯蔵される。
【００９４】
例えば、第１クロックサイクルには第２メモリ３０１から出力される初期値（Ｈ７）とｈレジスター３０９に貯蔵された中間値（ｈ）が合算され、この合算された値（ｈ+Ｈ７）はａレジスター３０２に貯蔵される。また、直前にａ〜ｇレジスターに貯蔵された中間データはｂ〜ｈレジスターにそれぞれ一段階ずつシフトされて貯蔵される。
【００９５】
また、第２クロックサイクルには第２メモリ３０１から出力される初期値（Ｈ６）と直前クロックサイクルでｈレジスターに貯蔵された中間値（ｅ）が合算される。ここで、第１クロックサイクルでｈレジスター３０９でｅレジスター３０６に貯蔵された中間値がシフトされて貯蔵されたので、第２クロックサイクルで第２加算器３１４はｅレジスター３０６に貯蔵された中間値と初期値（Ｈ６）を合算した値（ｅ+Ｈ６）をａレジスター３０２に出力する。したがって、第２加算器３１４から出力された値（ｅ+Ｈ６）はａレジスター３０２に貯蔵され、同時に第１クロックサイクルでａ〜ｇレジスターに貯蔵された値はｂ〜ｈレジスターにそれぞれ１段階ずつシフトされて貯蔵される。その結果、第２クロックサイクルの後にはａレジスター３０２に（ｅ+Ｈ６）が貯蔵され、ｂレジスター３０３には（ｈ+Ｈ７）が貯蔵され、残りｃ〜ｈレジスターには直前クロックサイクルでａ〜ｆレジスターに貯蔵された値がシフトされて貯蔵される。
【００９６】
前述した方法で８クロックサイクルの間の初期値更新過程が完了されると、各レジスターに貯蔵された値は次の数式５のようになる。
［数式５］
a = a + H0, b = b + H1, c = c + H2, …, h = h + H7
【００９７】
このように初期値更新が完了されると、各レジスターに貯蔵された値がＳＨＡ-２５６演算を行った最終結果データとなり、制御部１０２は各レジスターに貯蔵された値で第２メモリ３０１に貯蔵された初期値を更新する。そして、ＳＨＡ-２５６演算を１回のみ行う時には第２メモリ３０１に貯蔵された更新された初期値（Ｈ０、Ｈ１、…、Ｈ７）をＳＨＡ-２５６演算の最終結果データとしてシステムバスを通じて出力する。一方、ＳＨＡ-２５６演算を何回にかけて反復して行う場合、更新された初期値は次回のメッセージ圧縮演算のための初期値として使用される。
【００９８】
したがって、メッセージ圧縮部１０４はＳＨＡ-２５６演算を行うべきメッセージの長さが５１２ビットより長くて前述したメッセージスケジュール演算及びメッセージ圧縮演算を複数回行わなければならない場合、第２メッセージ圧縮演算からは既に各レジスターに初期値（Ｈ０、Ｈ１、…、Ｈ７）がロードされた状態であるので、初期値ロード過程を省略することが可能である。
【００９９】
一方、前述したメッセージ圧縮演算を行う時、第４マルチプレクサー３１５、第５マルチプレクサー３１６及び第６マルチプレクサー３１７から入力される値のうちの１つを選択するための制御信号と各レジスターにデータを貯蔵するための制御信号（ｗｒｉｔｅ信号）は制御部１０２から出力され、制御部１０２は前述した表２の順にメッセージ圧縮演算が行われるように各クロックサイクル別に各マルチプレクサー及びレジスターを制御する。
【０１００】
前述のように、本発明の実施例ではメッセージ圧縮部１０４を実現するために加算器を１つのみ使用する。したがって、メッセージ圧縮演算を行うためのメッセージ圧縮部１０４の回路面積及び消費電力を減らすことが可能であり、モバイルフォンのように低電力エンベデッドシステムに適用することが可能な効果がある。
【０１０１】
以上で説明した本発明の実施例は装置及び方法によってのみ実現されることではなく、本発明の実施例の構成に対応する機能を実現するプログラムまたはそのプログラムが記録された記録媒体を通じて実現されることもでき、このような実現は前記で説明した実施例の記載から本発明が属する技術分野における専門家であれば容易に実現することができる。
【０１０２】
以上、本発明の実施例について詳細に説明したが、本発明の権利範囲はこれに限定されず、請求範囲で定義している本発明の基本概念を利用した当業者の多用な変形及び改良形態もまた本発明の権利範囲に属する。
【符号の説明】
【０１０３】
１００    暗号装置
１０１    インターフェース部
１０２    制御部
１０３    メッセージスケジュール部 
１０４    メッセージ圧縮部
２０１    第１メモリ
２０２    第１演算関数演算部     
２０３    第２演算関数演算部
２０４    第１加算器
２０５    レジスター
２０６    第１マルチプレクサー
２０７    第２マルチプレクサー
２０８    第３マルチプレクサー
３０１    第２メモリ
３０２〜３０９    レジスター
３１０    第３演算関数演算部
３１１    第４演算関数演算部
３１２    第５演算関数演算部
３１３    第６演算関数演算部
３１４    第２加算器
３１５    第４マルチプレクサー
３１６    第５マルチプレクサー
３１７    第６マルチプレクサー
【図１】
2010107947.tif 000044
【図２】
2010107947.tif 000045
【図３】
2010107947.tif 000046
【図４】
2010107947.tif 000047
【図５】
2010107947.tif 000048