私は、相互に通信するモバイルアプリケーションと組み込みデバイスで構成されるシステムを開発しています。私は mbed TLS(旧称Polar SSL) を使用しています。
問題は、組み込みデバイスがTLSハンドシェイクを約7秒で実行することです。これは、私たちの使用例には多すぎます。
より良いMCUが必要ですか?より強力なMCUにMCU( ESP8266 )を変更することは明らかな解決策です。しかし、TLSハンドシェイクもMCUを変更せずに高速化できますか?
キャッシング多分?私はセッションキャッシングについて読みましたが、これでどれだけスピードアップできますか?デバイスは複数のユーザーによって制御されると想定する必要があるため、さまざまなセッションをキャッシュする必要があります。記憶を無駄にすることはできません。
認証は問題ではありません。1024RSAを使用しています。他のアルゴリズム(Diffie-HellmanやECCなど)で速度を上げることができますか?
編集:
段階的なハンドシェイク時間:
. Performing the SSL/TLS handshake:
hello request...0ms
client hello...30ms
server hello...0ms
server cert...0ms
server key exchange...4490ms
cert request...0ms
server hello done...0ms
client cert...0ms
client key exchange...3310ms
verify cert...0ms
client change cipher spec...0ms
client finished...10ms
server change cipher spec...0ms
server finished...0ms
flush buffers...0ms
hs wrapup...0ms
-------------------------------------------
-----------------hs done!------------------
-------------------------------------------
total: 7861
主なボトルネックは、非対称暗号が行われる鍵交換にあります。
Rsa鍵交換を使用します。これは、断然最速の方法です。このように、クライアントの鍵交換を計算するだけでよく、サーバーの鍵交換の計算を回避できます。さらに、証明書のサイズを変更することで、クライアントの鍵交換時間を制御できます。
RSA-2048暗号化はRSA-1024暗号化よりも時間がかかりますが、RSA-1024は、破壊可能であることが公に示されているサイズに近すぎることに注意してください。誰もがNSAは、 "興味深い"パーティーのRSA-1024を日常的に破っていると想定しており、その価格はいつかすぐに学者がそれを実行する能力を実証するまで下がり続けます。最後に学者がデモを行ったとき2009年に彼らがRSA-768を破ったときだったので、今日パブリッククラウド(カスタムハードウェアなし)でRSA-1024を破ることができるIMOは実現可能です。
また、DHEまたはECDHEを使用しない場合、証明書の有効期限が切れて役に立たなくても、記録されたすべてのトラフィックは、証明書の秘密鍵を使用した後で復号化できることに注意してください。したがって、証明書の秘密鍵を永久に秘密にしておく必要があります。
MbedTLSと bearssl-esp8266 の両方から、P-256 ECDHEのベンチマークを試みます。または、可能であればCurve25519 ECDHEを使用することもできます。