diverta / onecard-fido

MIT License
0 stars 0 forks source link

[macOSツール再構築対応] 暗号化処理の移行(FIDO PIN番号管理) #765

Closed makmorit closed 1 year ago

makmorit commented 1 year ago

概要

macOS版管理ツールの暗号化処理で使用中のOpenSSL(1.1.1t)が2023年9月でサポートを打ち切るそうですので、段階的にApple社から用意されているCommonCryptoにより、移行を進めていきます。 (こちらのコメントをご参照)

本プルリクエストの対象は「FIDO PIN番号管理」周りの下記処理になります。

関連する処理はこちらのドキュメントご参照

makmorit commented 1 year ago

進捗および方向性の再検討

結論から申し上げますと、OpenSSL --> Apple securityフレームワークへの移行は出来ないと判断しました。

調査の結果

本件ECDH鍵交換の動作結果です。こちらも結果から申し上げますと、生成された共通鍵の内容が一致せず[注1]、FIDO機能が正しく実行されません。 原因としては、nRF Crypto、OpenSSLでのECDH計算ロジックと、本件タスクで使用したApple securityフレームワークの計算ロジックが異なっている事が考えられます。

#
# macOS側
#
2023-04-01 12:57:00.119 [debug] Host pubkey
f2 a1 33 3f 19 85 28 21 e8 23 d0 ac 3e e0 fe 74 
71 ae c2 91 1c 94 a7 b0 e4 0e 58 7b 17 0f 04 b5 
3b 03 34 46 53 2e 3e a3 04 39 c4 76 b5 51 ce 99 
84 d1 7d 11 fb 6d f6 9e 00 e4 19 19 e1 ad b2 22 
2023-04-01 12:57:00.119 [debug] Client pubkey
78 a5 a5 ff 80 6f 61 26 76 f1 83 19 cb 53 d8 28 
54 5e 2b f4 97 a3 a5 5d aa f4 de c9 b2 cf f6 81 
64 20 93 12 ac 56 25 dd 48 b0 17 d5 99 2b 30 cd 
e9 fb 82 d1 28 0f 5f 3f 43 ac 94 bc ae 9d ac 36 
2023-04-01 12:57:00.120 [debug] Shared secret
29 7a 50 23 ce 81 10 da 10 10 46 8d 89 e4 a8 0a 
04 05 b3 be 17 f4 c5 c4 09 85 8c 45 3c da ab 38 
#
# nRF52840側
#
<debug> fido_crypto_sskey: public_key_raw_data:
<debug> fido_crypto_sskey:  78 A5 A5 FF 80 6F 61 26|x....oa&
<debug> fido_crypto_sskey:  76 F1 83 19 CB 53 D8 28|v....S.(
<debug> fido_crypto_sskey:  54 5E 2B F4 97 A3 A5 5D|T^+....]
<debug> fido_crypto_sskey:  AA F4 DE C9 B2 CF F6 81|........
<debug> fido_crypto_sskey:  64 20 93 12 AC 56 25 DD|d ...V%.
<debug> fido_crypto_sskey:  48 B0 17 D5 99 2B 30 CD|H....+0.
<debug> fido_crypto_sskey:  E9 FB 82 D1 28 0F 5F 3F|....(._?
<debug> fido_crypto_sskey:  43 AC 94 BC AE 9D AC 36|C......6
<debug> fido_crypto_sskey: client_public_key_raw_data:
<debug> fido_crypto_sskey:  F2 A1 33 3F 19 85 28 21|..3?..(!
<debug> fido_crypto_sskey:  E8 23 D0 AC 3E E0 FE 74|.#..>..t
<debug> fido_crypto_sskey:  71 AE C2 91 1C 94 A7 B0|q.......
<debug> fido_crypto_sskey:  E4 0E 58 7B 17 0F 04 B5|..X{....
<debug> fido_crypto_sskey:  3B 03 34 46 53 2E 3E A3|;.4FS.>.
<debug> fido_crypto_sskey:  04 39 C4 76 B5 51 CE 99|.9.v.Q..
<debug> fido_crypto_sskey:  84 D1 7D 11 FB 6D F6 9E|..}..m..
<debug> fido_crypto_sskey:  00 E4 19 19 E1 AD B2 22|......."
<debug> fido_crypto_sskey: fido_crypto_sskey_generate:
<debug> fido_crypto_sskey:  AD DC 2B C2 B1 EA 11 8A|..+.....
<debug> fido_crypto_sskey:  9D 6E 0F DB 27 F5 65 D1|.n..'.e.
<debug> fido_crypto_sskey:  AA D1 E9 09 A8 6F D4 59|.....o.Y
<debug> fido_crypto_sskey:  3C A7 A4 63 E5 2D 0E A3|<..c.-..

[注1] ログから必要な公開鍵交換が正しく行われていることは確認できますが、生成された共通鍵(Shared secret)の内容が一致していません。macOS側は29 7a 50...da ab 38となっていますが、nRF52840側はAD DC 2B...2D 0E A3となっています。

方向性の変更

こちらも結論から申し上げますと、OpenSSL 1.1 --> OpenSSL 3.0 への移行という方向性に切り替えたいと考えます。 ただし、既に移行がうまくいっているCommonCrypto系の処理は、そのまま活かしたいと思います。 AES --> #754 、DES --> #762 ご参照、HASH系の処理は今後のタスクで対応予定です。

なので前述「OpenSSL1.1-->3.0移行」は、CommonCryptoでの処理ができない(Apple securityフレームワークでも不調である)ECDH、ECDSA系の処理に限定するものといたします。