Contenu connexe
Similaire à セキュアエレメントとIotデバイスセキュリティ2 (20)
セキュアエレメントとIotデバイスセキュリティ2
- 2. Agenda
• 自己紹介
• きっかけ
• IoTセキュリティの潮流
• セキュアエレメントについて
ATECC608B Deep Dive
• Raspberry piでのATECC608B
• セキュアで簡単なプロトタイプ環境
• 展望
• まとめ
- 6. セキュアエレメント比較
ATECC608B SE050(C) Optiga Trust M
メーカー Microchip NXP Infineon
インターフェース I2C(経路暗号化対応),SWI I2C(経路暗号化対応)
暗号演算 楕円暗号(ECC) 楕円暗号(ECC)、RSA 楕円暗号(ECC)、RSA
楕円暗号 NIST P-256
ECC NIST (192 to 521 bit)
Brainpool (160 to 512 bit)
Twisted Edwards Ed25519
Montgomery Curve25519
Koblitz (192 to 256 bit)
Barreto-Naehrig Curve 256 bit
ECC : NIST curves up to P-521,
Brainpool r1 curve up to 512,
RSA暗号 - up to 4096 bit up to 2048
共通鍵暗号 AES-128
AES 128, 192 and
256 bit and DES keys with single DES,
2K3DES and 3K3DES
AES up to 256
ハッシュ SHA-256 SHA-224/256/384/512 HMAC up to SHA512
記憶領域 1.1KB 50KB 10KB
価格(1個当たり) 87円 476円 192円
パッケージ 8pin SOIC,DFN 20pin QFN 10pin DFN
製品ファミリ
限定機能のみの
ATECC108Aなど
限定機能のみのSE050(A)、SE050(B)
ソフトウェアカスタマイズができるSE051
Optiga Trust B, Optiga Trust X
採用実績
Google Coral SoM,Arduino MKR Wifi
Amazon Dash Button 2nd
gen.(ATECC108A)
ZYMBIT security module
NervesKey for NervesHub
Adafruit ATECC608 Breakout
Coldcard Bitcoin hardware wallet etc.
Atmark Techno Armadillo IoT G3,G4
Arduino Portenta H7
MIKROE PLUG&TRUST CLICK
Adafruit Infineon Trust M
Breakout Board
MIKROE TRUST M CLICK
対応規格 ー
Security certification CC EAL6+ (HW+JCOP)
JavaCard version 3.0.5
GlobalPlatform specification version GP 3.0
Security certification CC EAL6+
- 10. ATECC608B Deep Dive
■ATECC608BはTrust Platform という事前設定対応製品がある。
標準品はコンフィグをロックしないと使えないうえ、設定が難解。
・事前設定済みで証明書が書
き込み済み。変更はできない。
・最小発注数は10
・AWS IoT,Azure IoT Hub,
Google IoTなどのクラウド
接続対応
・事前設定済みで証明書が書
き込み済み。変更可能。
・最小発注数は2,000
・個別認証局利用可能
・セキュアブート、OTA認証、
ファームウェア確認、知的財
産保護、メッセージ暗号化、
IO保護などのユースケース利
用可能
・さらなるカスタマイズが変
更可能。
・最小発注数は4,000
・工場出荷時の指定プロビ
ジョニング対応
・フルカスタマイズ可能
- 12. ATECC608B Deep Dive
■ATECC608B-TNGTLSを使って、セキュアエレメントの基本機能と
セキュリティ対策シーンを検討する。
M5Stack + ATECC608B-TNGTLS
1、サーバー・クライアント認証、
TLS通信暗号化
2、AES暗号化
公式ドキュメントは以下リンクが正しい。
https://ww1.microchip.com/downloads/jp/DeviceDoc/40002112B_JP.pdf
ATECC608シリーズ共通のライブラリ Cryptoauthlibを使用する。
https://github.com/MicrochipTech/cryptoauthlib
Cryptoauthlibのドキュメント
https://github.com/MicrochipTech/cryptoauthlib/blob/main/cryptoauthlib-manual.pdf
- 20. サーバー・クライアント認証、
TLS通信暗号化
■I/O保護鍵の用途:ECDHのプリマスターシークレットの保護
クラウド インターネット プロセッサ I2C ATECC608B
ECDH用の鍵生成リクエスト → Tempkey(0xFFFF)へ鍵ペア作成
ECDH用の鍵生成 ATECC608BのTempkey公開鍵受領 ← Tempkeyの公開鍵を返却
ATECC608BのTempkey公開鍵受領 ← ATECC608BのTempkey公開鍵をクラウドへ送信
クラウドの公開鍵送信 → クラウドの公開鍵受領
クラウドの秘密鍵とTempkeyの公開鍵でECDH計算 クラウドの公開鍵をATECC608Bへ転送 → Tempkeyの秘密鍵とECDH計算
プリマスターシークレット生成 プリマスターシークレット受領 ← プリマスターシークレット返却
共通鍵生成 共通鍵生成
暗号通信開始 ⇔ 暗号通信開始
atcab_ecdh_tempkey_ioenc
(クラウドの公開鍵, プリマスターシークレットの戻り値, I/O保護鍵);
ATECC608B-TNGTLS
I2Cバスにロジアナを当てて覗き見られるのを防ぐ
- 29. Linux 5.10.92-v7+ armv7l bullseye
/** ¥brief default configuration for an ECCx08A device */
ATCAIfaceCfg cfg_ateccx08a_i2c_default = {
.iface_type = ATCA_I2C_IFACE,
.devtype = ATECC608,
{
#ifdef ATCA_ENABLE_DEPRECATED
.atcai2c.slave_address = 0x6A,
#else
.atcai2c.address = 0x6A,
#endif
.atcai2c.bus = 1,
#ifdef __linux__
.atcai2c.baud = 100000,
#else
.atcai2c.baud = 100000,
#endif
},
.wake_delay = 1500,
.rx_retries = 20
};
Raspberry piでのATECC608B
■Raspberry piでは、以下URLに従ってインストールする。
https://github.com/MicrochipTech/cryptoauthlib/wiki/PKCS11-TNGTLS
cryptoauth_testでデバイスをテストできる ソースの修正箇所 cryptoauthlib/lib/atca_cfgs.c
- 30. $ sudo vi /etc/apt/sources.list
(deb-src行のコメントを取る)
$ sudo apt update
$ sudo apt-get build-dep libengine-pkcs11-openssl1.1 gnutls-bin libgcrypt-dev p11-kit
$ git clone https://github.com/OpenSC/libp11.git
$ cd libp11
$ ./bootstrap
$ ./configure
$ make
$ sudo make install
$ cd /var/lib/cryptoauthlib/
$ cp slot.conf.tmpl 0.conf
$ vi 0.conf
label = MCHP
interface = i2c,0x6a,1
device = ATECC608A-TNGTLS
$ sudo vi /usr/share/p11-kit/modules/cryptoauthlib.module
module: /usr/lib/arm-linux-gnueabihf/libcryptoauth.so
critical: yes
trust-policy: yes
managed: yes
log-calls: no
Raspberry piでのATECC608B
■証明書読み取り
PKCS#11のセットアップ 証明書リストの表示
$ p11tool --list-tokens
Token 1:
URL:
pkcs11:model=ATECC608A;manufacturer=Microchip%20Technology%20Inc;serial=2
3F9B2CA83313501;token=MCHP
Label: MCHP
Type: Hardware token, Trust module
Flags: RNG, uPIN uninitialized
Manufacturer: Microchip Technology Inc
Model: ATECC608A
Serial: 23F9B2CA83313501
Module: /usr/lib/arm-linux-gnueabihf/libcryptoauth.so
$ p11tool --list-all-certs 'pkcs11:token=MCHP;type=cert'
Object 0:
URL:
pkcs11:model=ATECC608A;manufacturer=Microchip%20Technology%20Inc;serial=2
3F9B2CA83313501;token=MCHP;object=device;type=cert
Type: X.509 Certificate (EC/ECDSA-SECP256R1)
Expires: Thu Dec 31 23:23:23 2037
Label: device
ID:
Object 1:
URL:
pkcs11:model=ATECC608A;manufacturer=Microchip%20Technology%20Inc;serial=2
3F9B2CA83313501;token=MCHP;object=signer;type=cert
Type: X.509 Certificate (EC/ECDSA-SECP256R1)
Expires: Thu Dec 31 23:23:23 2037
Label: signer
Flags: CKA_CERTIFICATE_CATEGORY=CA; CKA_TRUSTED;
ID:
- 31. $ p11tool --export-stapled 'pkcs11:token=MCHP;object=device;type=cert' | openssl
x509 -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
51:df:6a:01:f9:17:ab:43:91:3c:42:08:b7:0a:ad:83
Signature Algorithm: ecdsa-with-SHA256
Issuer: O = Microchip Technology Inc, CN = Crypto Authentication Signer 2700
Validity
Not Before: Mar 11 07:00:00 2020 GMT
Not After : Mar 11 07:00:00 2048 GMT
Subject: O = Microchip Technology Inc, CN = sn0123F9B2CA83313501
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:41:82:3c:68:9c:43:b0:d3:a5:64:e6:c2:09:7d:
cb:b9:f2:ce:81:6c:c3:cd:e2:56:0f:19:96:e4:d9:
a3:b8:47:ae:f5:e9:49:07:6b:7b:14:99:8a:ee:72:
d7:a1:01:7d:c3:fa:95:95:8d:c2:8c:43:a4:f4:04:
18:4d:14:e6:3b
ASN1 OID: prime256v1
NIST CURVE: P-256
…
Signature Algorithm: ecdsa-with-SHA256
30:46:02:21:00:f4:10:94:85:3d:31:af:ac:a2:cd:a1:42:e9:
0f:6b:c3:00:af:ee:8f:32:f2:c4:1c:c2:85:42:73:bc:ce:8b:
1b:02:21:00:a8:41:cb:4d:da:88:68:87:fc:ec:37:66:04:87:
2a:51:fd:f2:c4:01:41:e3:7b:01:f4:ed:7f:ce:48:47:8d:ce
Raspberry piでのATECC608B
■証明書読み取り
証明書が読み取れた AWS IoTにて証明書登録、ポリシーをアタッチ後、メッセージ送信