こんにちは。よこです。
現在、TSIPを使ってIoTセキュリティについて学んでいます。
以下のマニュアルを読んでみるとtsipの暗号化にはユニークIDと乱数が使われています。そのため、復号にもユニークIDと乱数が必要と考えていますが、生成された乱数はTsip内に保存されているのでしょうか。
www.renesas.com/.../rx65n-group-rx651-group-users-manualhardware-rev230
また、復号に必要な要素は何がありますでしょうか。
ご教授のほどよろしくお願いいたします。
よこさん
シェルティです。こんにちは。
TSIP周りのソリューション開発も担当しております。
TSIP含めセキュリティ周りは説明が複雑になりがちで、分かりづらくすみません。
ご提示いただいたRX65Nマイコンのハードウェアマニュアルはチップ仕様のみが書かれており、全体像をつかむのが難しいと考えています。
それらは「TSIPドライバ」のページにあるソフトウェアのマニュアルに記載しています。
https://www.renesas.com/jp/ja/software-tool/trusted-secure-ip-driver
この中の「RXファミリ用 Trusted Secure IPドライバ(バイナリ版)」の「ダウンロード: RX family TSIP (Trusted Secure IP) Module Firmware Integration Technology (Binary version) Rev.1.14 - Sample Code (ZIP)」が参考になります。
→\r20an0548xx0114-lib-rx-tsip-security\r20an0548jj0114-rx-tsip-security.pdf
→7章の鍵データの運用が参考になると思います。
または、以下も導入時点の検討において参考になると思います。
/r20an0548xx0114-lib-rx-tsip-security/reference_documents/ja/r01an5792jj0101-rx-tsip.pdf
これらのドキュメントも網羅的に全部書いてあるので、ポイントを掴むのが難しいと予想しており改善中です。以下のようなもっとざっくりとしたクイックスタートガイド的なものが必要なように考えています。
https://github.com/renesas/rx72n-envision-kit/wiki/1-Trusted-Secure-IP%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90
このURLにある以下絵が、よこさんの知りたいことなのでは、と思います。疑問点あればまたご質問ください。
ユーザシステム上「ユーザ鍵(平文)」が一切出現しないのがTSIPの良いところです。
以上です
シェルティさん、いつもありがとうございます。
TSIPを使ったユーザー鍵の暗号方法がわかりましたが、未だ、ユーザー鍵生成情報の復号についてわかりません。
疑問点としては
1. ユーザー鍵生成情報に乱数成分が組み込まれているが、復号の際に乱数成分を使わないのはなぜか。
2. 乱数成分はその都度、ユーザー鍵生成情報を作成する際に値は変わるのか。
お手数おかけしますが、ご教授のほどよろしくお願いいたします。
シェルティです、こんにちは。
ご確認ありがとうございます。確かに最後に示したデータフロー図はユーザ鍵を暗号化してシステム上安全に保管しつつ、それを利用するところまで書いてありますが、その利用するところ(一番下の真ん中の紫の箱「AES/RSA/ECC等の暗号化」)の詳細が書いてないので、ユーザ鍵生成情報(暗号文)がどのように復号されるかがこの図だけだと分かりませんね。以下回答です。
1.ユーザ鍵(平文)を取り出すことが目的であり乱数はその際不要だから、です。では乱数は何のために必要か、という疑問が残ると思います。これは以下URLの解説の通り一般的に必要な鍵データの要件であるところの③を達成するためです。
2.はい。ご推察の通りです。
セキュリティは過去存在したいろいろなアタック手法から防御する方法がいろいろな形で盛り込まれていて、さらには実際問題どこまでアタックをされることを想定するのか、対策を盛り込むとしてもシステム単価に見合った対策なのか、といったトレードオフ具合をリーズナブルに勘案し実装仕様を決めており、故になかなか情報が煩雑に見えると思います。不明点などありましたら可能な範囲でお答えしますのでまたご質問ください。
ちなみにユーザファクトリー上で処理される紫の箱「ユーザ鍵インストールAPI」と、ユーザシステム上で処理される紫の箱「AES/RSA/ECC等の暗号化」は完全にTSIP内部で行われており、ユーザ鍵(平文)はTSIP内部から一切出てきません。復号されたユーザ鍵を取り出そうとしてTSIPのI/OレジスタにいたずらするとTSIPが停止するカラクリを備えてます。そしてTSIPはNISTの検定に合格できる水準で守られたロジックになってます。
シェルティさん、こんにちは。
よこです。
ご丁寧に説明していただき、誠にありがとうございます。
ということは復号に必要なのは鍵生成情報、ユニークIDとHRKの3つであっていますでしょうか。
はい、合っています。暗号のデータフローの「AES/RSA/ECC等の暗号化」と同様に「AES/RSA/ECC等の復号」のソフトウェアAPI的な入力は「鍵生成情報」と「システムデータ(暗号文)」で出力は「システムデータ(平文)」になります。ユニークIDとHRKの入力はAPI内部で自動で行われるのでユーザは関与しなくてOKです。乱数も同様に暗号時はAPI内部で自動でくべられ、復号時はAPI内部で自動で廃棄されます。
補足です。実際のコードは以下にサンプルがあります。
https://github.com/renesas/rx72n-envision-kit/wiki/1-Trusted-Secure-IP%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90#main%E9%96%A2%E6%95%B0%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0-aes128%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D
R_TSIP_Aes128EcbEncryptInit(&tsip_aes_handle, &tsip_aes_key_index); R_TSIP_Aes128EcbEncryptUpdate(&tsip_aes_handle, plain, cipher, sizeof(plain)); R_TSIP_Aes128EcbEncryptFinal(&tsip_aes_handle, cipher, &cipher_length);一般的な暗号APIに倣って、init-update-final方式です。tsip_aes_key_indexというのが「鍵生成情報」です。
シェルティさん
ご返信ありがとうございます。
TSIPについてで気になることがありましたので以下についてご教授願えませんでしょうか。
TSIPのモジュールマニュアルをみているとユーザー鍵はTSIPに保存してあります。(マニュアルのp12)
モジュールマニュアルURL:www.renesas.com/.../rx-family-tsip-trusted-secure-ip-module-firmware-integration-technology-binary-version
ですが、シェルティさんがくださった画像ではユーザー鍵は保存していないように見えます。
どちらが正しいのでしょうか?
すみません、分かりづらいですね。
どちらが正しいかというと、どちらも正しいです。ただ言葉の定義がすこし揺れています。今後改善したいと考えます。
TSIPドライバのマニュアル:暗号鍵、鍵生成情報(暗号鍵をユーザ鍵インストールAPIで暗号化したもの)
シェルティの図:ユーザ鍵(平文)、ユーザ鍵生成情報(暗号文)(ユーザ鍵(平文)をユーザ鍵インストールAPIで暗号化したもの)
という関係性になっています。
シェルティの図ではユーザ鍵(平文)がTSIPの中にないように見えますが省略しているだけで、あります。AES/RSA/ECC等の暗号化の紫色ブロックにユーザ鍵生成情報(暗号文)を入れると中でユーザ鍵(平文)に戻ります。
ご返信していただきありがとうございます。
仕組みについて確認したく存じます。
今までのお話の中だとTSIP内部にはHidden Root Keyとユーザー鍵(平文)が保存されている。
そして、ユーザー鍵の復号には鍵生成情報とユニークIDをトリガーにしてTSIP内部に保存してあるユーザー鍵を取り出すイメージであっていますでしょうか?
こんにちは、シェルティです。
お答えします。
シェルティの図は暗号にフォーカスしたデータフローなのでデータ置き場が不明瞭です。よこさんに貼っていただいた以下絵の方がシステムベースでの理解がしやすいですね。
①Hidden Root Keyとユーザー鍵(平文)が保存されている
→保存が不揮発性という意味ならばHidden Root KeyはYes、ユーザ鍵(平文)はNoです。ユーザ鍵(平文)は安全領域内の暗号鍵レジスタにセットされており電源が落ちると消えます。故にフラッシュメモリに鍵生成情報として保存しています。鍵生成情報はフラッシュメモリにあるので電源が落ちても消えません。
②そして、ユーザー鍵の復号には鍵生成情報とユニークIDをトリガーにしてTSIP内部に保存してあるユーザー鍵を取り出すイメージ
→前半はYesで、後半はNoです。鍵生成情報とユニークIDを入力としてユーザ鍵(平文)を再計算し暗号鍵レジスタにセットする、が正解です。
TSIPに鍵保管できるようメモリを抱えてもいいのですが、鍵が何個必要かはシステム依存なのでこの方式になってます。この方式ならばフラッシュメモリの容量に合わせて多くの鍵生成情報を持つことが可能です。またフラッシュメモリに限らず外部シリアルフラッシュチップやSDカード等に鍵生成情報を書き出しても構いません。鍵生成情報はHidden Root Keyにより暗号化がかかっているのでアタッカは鍵生成情報を復号できませんし、ユニークIDに紐づいているのでSDカードなど外部記録媒体経由で別のTSIPに入力しても使えません。
ご返答していただき誠にありがとうございます。
自分の中でTSIPの仕組みが明瞭になってきました。
何度も確認していただくことになり恐縮ですが、私の理解としてはTSIP内のユーザー鍵とHRKの取り扱いは
・HRKはTSIP内部の不揮発性メモリに保存されているため、マイコンのシャットダウン後でも保持される。
・マイコン起動時にユーザー鍵は鍵生成情報、ユニークIDとHRKを使ってユーザー鍵が復号されてTSIP内部のRAM(暗号鍵レジスタ)にセットされる。
・ユーザー鍵はTSIP内のRAMに保存されている。そのため、マイコンのシャットダウンにはユーザー鍵(平文)はメモリに残らない。
・マイコン動作中はユーザー鍵とユニークIDをトリガーにしてTSIP内部のRAM(暗号鍵レジスタ)からユーザー鍵(平文)をっ取り出す。
となりますが、上記の内容であっていますでしょうか。
ご検討進めていただき、ありがとうございます。下記回答します。
> ・HRKはTSIP内部の不揮発性メモリに保存されているため、マイコンのシャットダウン後でも保持される。
→合っています。
> ・マイコン起動時にユーザー鍵は鍵生成情報、ユニークIDとHRKを使ってユーザー鍵が復号されてTSIP内部のRAM(暗号鍵レジスタ)にセットされる。
→マイコン起動時ではなく、TSIPドライバの各種APIに鍵生成情報を入力した時点、が正解です。
> ・ユーザー鍵はTSIP内のRAMに保存されている。そのため、マイコンのシャットダウンにはユーザー鍵(平文)はメモリに残らない。
> ・マイコン動作中はユーザー鍵とユニークIDをトリガーにしてTSIP内部のRAM(暗号鍵レジスタ)からユーザー鍵(平文)をっ取り出す。
→ユーザ鍵とユニークIDがトリガではなく、TSIPドライバの各種APIに鍵生成情報を入力、がトリガです。それとユーザー鍵(平文)はTSIP内部のRAM(暗号鍵レジスタ)にセットされたままで、TSIP外部含めTSIP内部のRAM(暗号鍵レジスタ)から取り出されることは有りません。
回答していただき誠にありがとうございます。
復号化の仕組みが理解できました。
幾度もご回答していただきありがとうございました。