HSMとは?

第1時限目 HSMとは

HSMって何だろう?

HSM(Hardware Security Module)とは、一言で説明してしまうと・・・ 鍵を守る金庫の役目をするハードウェアです。
ここで、鍵と言うのは、暗号や電子署名に利用する鍵のことで、一般的には128~2048bit程度のバイナリーデータです。この鍵は、絶対に他人に見せてはいけないもので、盗まれるなどして万が一鍵が漏えいするようなことがあれば、暗号を解読されて機密情報が流出してしまったり、ICクレジットカードが大量に偽造されたりと、大変なことが起こってしまいます。
HSM製品の例
こんなことが起こらないように鍵は安全に保管しなければならないのですが、ソフトウェアの工夫だけで鍵を守ろうとしても限界があります。そこで、鍵を保管するハードウェアとして作られたのがHSMであり、さまざまな攻撃から鍵を保護する仕組みが備えられています。
HSMの形はいろいろありますが、どの製品も、右の写真のように内部の鍵を守るために堅牢な構造になっています。

鍵を保管するだけ?

HSMは、このように鍵を安全に保管する装置なのですが、実は、保管するだけでは鍵の安全性を保つことができません。

図1 HSMが鍵保管機能しか備えていなかったら

ここで、図1を見てください。HSMに鍵を安全に保管してあったとしても、暗号文を作成するときや、電子署名を行うときは、その鍵を取り出してコンピューター上で暗号処理や署名処理を行う必要があります。このコンピュータ上に取り出すことが、極めて危険なのです。HSMからコンピュータに鍵を送るときにデータを盗み見られる可能性がありますし、コンピュータのメモリー中にロードされた鍵を、メモリーダンプの要領で盗み出されることも考えられます。

図2 鍵データはメモリーダンプから容易に読みだすことができる

図2は、コンピュータのメモリー中のデータをダンプし、0は黒、1は白のパターンとして表示したものです。メモリー中のデータというものは、プログラムコードにしても処理対象のデータにしても、ある程度の規則性があり完全にランダムなデータというわけではありません。しかし、鍵データは本質的にかなりランダムネス(乱数性)が高く、図2のように表示した場合、鍵データがどこに存在するか、簡単に見破ることができてしまいます。

図3 HSMが鍵保管機能+暗号/署名機能を内蔵する場合

鍵を危険にさらさないようにするためには、鍵をHSMから取り出さなければよいのですが、それでは鍵を利用することができません。そこで、HSMは、図3のように暗号・電子署名などの演算機能まで本体内に内蔵し、鍵を一切外に取り出さずに暗号、電子署名などの処理ができるようになっているのです。

HSMの基本機能

HSMの基本機能をまとめると、以下の4つになります。

  1. 鍵を安全に保管する
  2. 鍵を用いて暗号演算や電子署名演算を行う
  3. 鍵を生成する
  4. 乱数を生成する

a.の保管というのは、上で述べたように鍵データを安全に守る機能です。そのために、HSMを壊して中身を取り出すような物理的攻撃に対しても鍵を安全に守れるように、HSMにはさまざまな構造上の工夫が施されています。
b.は、HSM内部で暗号処理や電子署名処理を行う機能ですが、一般的に、HSMに内蔵される暗号プロセッサは非常に高性能であるため、HSMを暗号や電子署名処理を高速化するアクセラレーターとして使うこともできます。
a.とb.の機能により、鍵をHSMの外に取り出さずとも、暗号処理、電子署名処理などが行えるようになります。さらに、c.のHSM内部で鍵を生成する機能が加わると、HSM内部で生成された鍵が、その生涯に渡って一回もHSMの外部の外に取り出されることがないという、極めて安全な運用ができるようになります。
d.の乱数生成機能というのは、他の機能とちょっと毛色が違うように見えますが、暗号の世界では非常に重要な機能です。乱数は、鍵を生成するときや暗号化の処理などで頻繁に用いられますが、乱数の質が悪い、すなわち乱数の分布に偏りがあったり、生成される乱数の系列に僅かでも法則性があったりすると、暗号データを解読しようとする攻撃者に付け入る隙を与えてしまいます。ところが、乱数をソフトウェアで生成しようとすると、高品質な(つまりとってもランダムな)乱数を作ることはなかなか困難なのです。そのため、HSMの多くは、内部に物理的に乱数を発生させる仕組みを内蔵しており、この仕組みを使って乱数を生成するのです。