[免責事項:私はセキュリティ/暗号の専門家であり、毎日このようなセキュリティアーキテクチャの問題に対処しています。]
無人プロセスがそれらにアクセスできるが、攻撃者はアクセスできないような方法で、資格情報を保存する問題につまずきました。これはよく知られた解決が非常に難しい問題です。
IoTデバイスに、一部のTPMなどのマザーボードにハードウェアキーストアが組み込まれている場合、またはAndroidハードウェアキーストアまたはApple Secure Enclaveに相当するものがある場合は、それを使用できます。
従来のサーバーではHSMまたはスマートカードを使用できますが、私が知っている唯一の完全なソフトウェアソリューションは、すべてのハードウェアデバイスのシリアル番号を組み合わせて構築された何らかの「ハードウェアフィンガープリント」からAESキーを導出することです。次に、そのAESキーを使用して資格情報を暗号化します。同じサーバー上で実行されているプロセスは、AESキーを再構築し、資格情報を復号化できますが、サーバーからファイルを抽出すると、本質的に復号化できなくなります。
IoTは、次の2つの理由でレンチを投入します。
ハードウェアのシリアル番号が一意であるという仮定はおそらく成り立たず、
サーバーとは異なり、攻撃者はデバイスに物理的にアクセスできるため、デバイス上でシェルを取得して復号化プログラムを実行できます。
基本的に、ローカルプロセスがデータを復号化できる場合、そのローカルプロセスを実行できる攻撃者もデータを復号化できるため、ハードウェア暗号化(TPM)と「ハードウェアフィンガープリント」暗号化はいずれも難読化です。
したがって、標準のトリックはここでは機能しないように見えます。自問する必要がある最初の質問は次のとおりです。
- 私の脅威モデルは何ですか/このプロジェクトはどこに
Secure <--> Convenient
スケールしますか?
最終的に、私はあなたがそれを決定しsecurity > convenience
、各起動後に人間に資格情報を入力させる必要があると思います(@BenceKaulicsの答えのようなものを使用して)、またはあなたはそれを決定security < convenience
してデバイスに資格情報を置くだけです、おそらくあなたがそれが違いを感じます。
これは、IoTデバイスの性質によって難しくなる難しい問題です。
完全を期すため、この問題に対する本格的な産業ソリューションは次のとおりです。
- 製造時に各IoTデバイスに一意のRSA公開キーを与えます。デバイスのシリアル番号に対して、この公開鍵をdbに記録します。
- 適切なサーバーに機密資格情報を保存し、「ゲートウェイ」と呼びましょう。
- IoTデバイスが(RSAキーを使用して)ゲートウェイに対して認証されると、ゲートウェイは保存された資格情報を使用してそのセッションを開き、セッショントークンをデバイスに返します。
- 最高のセキュリティを実現するために、ゲートウェイは物理(またはVPN)ゲートウェイであるため、IoTデバイスからのすべてのトラフィックはゲートウェイを通過し、ファイアウォールルールなどをより細かく制御できます。理想的には、デバイスが直接(VPN以外のトンネル)インターネットへのアクセス。
このようにして、デバイスを侵害した攻撃者はセッションを開くことができますが、資格情報に直接アクセスすることはできません。