|
SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (ModusToolbox)
|
Functions | |
| void | bento_devmode_init (void) |
| เป็น idempotent สร้าง secret ขนาด 32 ไบต์ใน RAM จุดเข้าสาธารณะของ devmode ทุกจุดเรียกฟังก์ชันนี้เอง | |
| void | bento_devmode_nonce_issue (uint8_t nonce_out[BENTO_DEVMODE_NONCE_LEN]) |
| เติม nonce ใหม่ขนาด 16 ไบต์ ทับตัวที่ค้างอยู่ทิ้ง และเริ่มนับนาฬิกา TTL | |
| bool | bento_devmode_unlock (const char *hmac_hex, size_t hmac_hex_len) |
| ตรวจสอบ HMAC เทียบกับ nonce ที่ค้างอยู่ และทำให้ nonce ใช้ไม่ได้อีกทุกครั้งที่ถูกเรียก (ใช้ได้ครั้งเดียว) | |
| void | bento_devmode_lock (void) |
| ล้าง flag ปลดล็อก | |
| bool | bento_devmode_is_unlocked (void) |
| บอกว่า verb ที่มีสิทธิ์พิเศษ (bento.exec) ได้รับอนุญาตอยู่ในขณะนั้นหรือไม่ | |
| size_t | bento_devmode_secret_hex (char *out, size_t out_sz) |
| secret ในรูป hex 64 อักขระ + NUL หรือคืน 0 เมื่อบัฟเฟอร์เล็กเกินไป ห้ามพิมพ์ค่านี้ลง UART | |
| void | bento_devmode_emit_provision (void) |
| ส่ง event provision หนึ่งครั้งต่อการบูตหนึ่งรอบ ตอนเปลี่ยนสถานะเป็น CONNECTED การส่งที่ล้มเหลวจะลองใหม่ | |
| size_t | bento_devmode_secret_fp_hex (char *out, size_t out_sz) |
| 4 ไบต์แรกของ SHA-256(secret) ในรูป hex 8 อักขระ + NUL — พิมพ์ออกได้อย่างปลอดภัย | |
8 ฟังก์ชัน: การปลดล็อกโหมดสำหรับผู้พัฒนา ในกลุ่ม bento_devmode_* คอมไพล์เฉพาะเมื่อ ENABLE_PAGE_BENTO_BUDDY=1 (ค่าตั้งต้นคือ 0, proj_cm33_ns/Makefile:64, :305) ให้ build ใหม่หลังจาก make getlibs — ดู Flag gate (อ่านก่อน)
การประกาศ: bento_devmode.h ส่วนการนำไปสร้างจริงถูกเก็บไว้ใน libbento_secure.a secret ที่ใช้ร่วมกันนั้น อยู่ใน RAM เท่านั้นและถูกสร้างใหม่ทุกครั้งที่บูต (การคงค่าไว้ใน slot 0xE120 ของ OPTIGA ถูกเลื่อนออกไป) — ฝั่ง desktop ต้องจัดเตรียมใหม่หลังการบูตใหม่ทุกครั้ง TTL ของ nonce คือ BENTO_DEVMODE_NONCE_TTL_MS (60000) และมี challenge ค้างได้ครั้งละหนึ่งรายการ
สิ่งที่ challenge/response นี้ปกป้องได้ และสิ่งที่ปกป้องไม่ได้ การจัดเตรียมค่าเริ่มต้นนั้นทำโดยส่ง secret ออกไปในรูป plaintext ให้ peer ตัวแรกที่เชื่อมต่อสำเร็จ (Devmode ที่ bento_devmode_emit_provision) ผ่าน TX ที่ไม่ได้ตั้งบิต GATTDB_PERM_AUTH_* และตัว secret มาจาก xorshift32 ที่มีเอนโทรปีต่ำกว่า 32 บิต ขั้นตอน HMAC เองถูกต้อง แต่ผลลัพธ์รวมคือ gate ที่กัน peer ซึ่งมาทีหลังได้เท่านั้น จึงเป็นเครื่องกีดขวาง ไม่ใช่ขอบเขตการบังคับใช้สิทธิ์
| void bento_devmode_init | ( | void | ) |
เป็น idempotent สร้าง secret ขนาด 32 ไบต์ใน RAM จุดเข้าสาธารณะของ devmode ทุกจุดเรียกฟังก์ชันนี้เอง
คุณภาพของ secret PRNG ที่ใช้คือ xorshift32 ซึ่ง seed จาก tick ของ FreeRTOS, แอดเดรสบน stack และค่าคงที่หนึ่งค่า เอนโทรปีจึงต่ำกว่า 32 บิต และไม่แข็งแรงพอในเชิงการเข้ารหัส ไม่ได้ใช้ RNG ของ OPTIGA การย้ายไปใช้ค่าจากชิปเป็นงานที่ยังไม่ได้ทำ
| void bento_devmode_nonce_issue | ( | uint8_t | nonce_out[BENTO_DEVMODE_NONCE_LEN] | ) |
เติม nonce ใหม่ขนาด 16 ไบต์ ทับตัวที่ค้างอยู่ทิ้ง และเริ่มนับนาฬิกา TTL
ผลด้านความปลอดภัยที่ต้องระบุให้ตรง ฟังก์ชันนี้ส่ง secret ออกไปในรูป plaintext ให้ peer ตัวแรกที่เชื่อมต่อสำเร็จหลังการบูต และ characteristic TX ไม่ได้ตั้งบิต GATTDB_PERM_AUTH_* (ดู ข้อมูล GATT) ดังนั้น peer ที่ยังไม่ได้จับคู่ก็รับค่านี้ได้ ขั้นตอน HMAC-SHA256 เองถูกต้อง แต่การครอบครองกุญแจไม่ได้ถูกจำกัดไว้กับเครื่องเดสก์ท็อปที่ได้รับอนุญาต gate นี้จึงกัน peer ที่มาทีหลังได้เท่านั้น ให้ถือเป็นเครื่องกีดขวาง ไม่ใช่ขอบเขตการบังคับใช้สิทธิ์
| bool bento_devmode_unlock | ( | const char * | hmac_hex, |
| size_t | hmac_hex_len ) |
ตรวจสอบ HMAC เทียบกับ nonce ที่ค้างอยู่ และทำให้ nonce ใช้ไม่ได้อีกทุกครั้งที่ถูกเรียก (ใช้ได้ครั้งเดียว)
| void bento_devmode_lock | ( | void | ) |
ล้าง flag ปลดล็อก
| bool bento_devmode_is_unlocked | ( | void | ) |
บอกว่า verb ที่มีสิทธิ์พิเศษ (bento.exec) ได้รับอนุญาตอยู่ในขณะนั้นหรือไม่
| size_t bento_devmode_secret_hex | ( | char * | out, |
| size_t | out_sz ) |
secret ในรูป hex 64 อักขระ + NUL หรือคืน 0 เมื่อบัฟเฟอร์เล็กเกินไป ห้ามพิมพ์ค่านี้ลง UART
| void bento_devmode_emit_provision | ( | void | ) |
ส่ง event provision หนึ่งครั้งต่อการบูตหนึ่งรอบ ตอนเปลี่ยนสถานะเป็น CONNECTED การส่งที่ล้มเหลวจะลองใหม่
| size_t bento_devmode_secret_fp_hex | ( | char * | out, |
| size_t | out_sz ) |
4 ไบต์แรกของ SHA-256(secret) ในรูป hex 8 อักขระ + NUL — พิมพ์ออกได้อย่างปลอดภัย