หน้าแรก ดูโปรเจกต์ทั้งหมด
Intermediate

โปรเจกต์ TLS 1.3 ที่เป็นมิตรกับ Device

Library สำหรับเข้าถึง SIM-based cryptography services - การ implementation ของ TLS 1.3 protocol - สำหรับสอง boards: MKR GSM 1400 และ Nano Every

โปรเจกต์ TLS 1.3 ที่เป็นมิตรกับ Device

รายการอุปกรณ์และเครื่องมือ

1x Pod IoT Platform API
-
1x Pimoroni LED 10 mm
🛒 สั่งซื้อ
1x Arduino IDE
-
1x Arduino MKR GSM 1400
-
1x Arduino Nano Every
-
1x DHT22 Temperature Sensor
🛒 สั่งซื้อ
}

รายละเอียดและวิธีทำ

โปรเจกต์นี้เป็นส่วนต่อจากซีรีส์ที่สาธิตการใช้งานบริการเข้ารหัสลับ (cryptographic services) บนพื้นฐานของ SIM เพื่อเพิ่มความปลอดภัยให้กับอุปกรณ์ IoT

โปรเจกต์แรกได้สาธิตการเข้ารหัสข้อมูล telemetry ในขณะที่ส่งข้อความจากอุปกรณ์ IoT ไปยังเซิร์ฟเวอร์ นั่นคือ "TLS 1.3 for Arduino Nano".

โปรเจกต์ที่สอง "Zero Touch Provisioning based on TLS 1.3" มีจุดประสงค์เพื่อแสดงการติดตั้งอุปกรณ์ (Device Deployment) หรือพูดอีกอย่างคือการตั้งค่าอุปกรณ์เมื่อเปิดใช้งานครั้งแรก นอกจากนี้โปรเจกต์ยังสาธิตการควบคุมอุปกรณ์อย่างปลอดภัยถาวรผ่านการร้องขอพารามิเตอร์ควบคุมจากเซิร์ฟเวอร์เป็นระยะ

ขณะนี้ฟังก์ชันอินเทอร์เฟซ SIM ของทั้งสองโปรเจกต์ได้ถูกรวมเข้าไว้ใน Library ชื่อ PodEnoSim ซึ่งพร้อมใช้งานใน Arduino Library Manager และช่วยให้นักพัฒนา IoT เริ่มต้นใช้งานเทคโนโลยีนี้ได้ง่ายยิ่งขึ้น

ในการโหลด Library ให้ไปที่เมนู Tools จากเมนูหลักของ IDE แล้วเลือก Manage Libraries... ในช่องค้นหาให้พิมพ์ PodEnoSim และกดปุ่ม Install

ในระหว่างการติดตั้ง Library คุณอาจถูกถามถึง dependencies ที่ขาดหายไป

กดปุ่ม Install all เพื่อให้แน่ใจว่าทุกอย่างจะทำงานได้อย่างถูกต้อง

Library นี้ได้รับการทดสอบกับ Microcontroller สองรุ่นที่แตกต่างกัน:

  • SAMD21 พร้อม Modem u-blox SARA-U201 (Board MKR GSM 1400)
  • ATMega4809 พร้อม Modem Sim7000E (Board Arduino Nano Every พร้อม Waveshare NB-IoT Hat)

มีตัวอย่างต่อไปนี้ให้สำหรับแต่ละ Board:

  • ส่งข้อมูลไปยังเซิร์ฟเวอร์ด้วยวิธีที่มีการยืนยันตัวตนและเข้ารหัส (SIM2CloudEncryption-DHT22)
  • รับค่าการตั้งค่าหรือพารามิเตอร์ควบคุมจากเซิร์ฟเวอร์ด้วยวิธีที่มีการยืนยันตัวตนและเข้ารหัส (ZeroTouchProvisioning-LEDExternal)

มีอีก 2 ตัวอย่างเพิ่มเติมสำหรับ Board MKR GSM 1400 ซึ่งช่วยให้ศึกษาเทคโนโลยีได้โดยไม่ต้องใช้อุปกรณ์เสริม - เพียงแค่จำลองแหล่งข้อมูล (SIM2CloudEncryption) และการควบคุมสถานะของ LED ในตัวจากเซิร์ฟเวอร์ (ZeroTouchProvisioning-LEDInternal)

ลองมาดูตัวอย่างที่ง่ายที่สุดกัน - SIM2CloudEncryption สิ่งที่คุณต้องการสำหรับการทดสอบคือ Board Arduino MKR GSM 1400 และ Pod ENO SIM

ในการโหลดตัวอย่าง ให้ไปที่เมนู File จากเมนูหลักของ IDE แล้วเลือก Examples จากนั้นเลื่อนลงไปที่ส่วน ExamplesfromCustomLibraries และค้นหาชื่อ Library PodEnoSim. เลือก Arduino-MKR-GSM-1400 และ SIM2CloudEncryption แล้วคุณจะได้ Sketch สาธิต

Sketch นี้จะจำลองข้อมูลที่ "สำคัญ" (แบบ hardcoded) ที่คุณต้องส่งไปยังเซิร์ฟเวอร์ มันคือข้อความในรูปแบบ JSON-encoded: {"temperature":21.5} ซึ่งถูกกำหนดเป็นค่าคงที่ DATA_ITEM หากคุณต้องการเปลี่ยนข้อมูลนี้ โปรดอย่าลืมอัปเดตค่าคงที่ LEN_DATA ให้สอดคล้องกัน

ฟังก์ชัน setup() ประกอบด้วย 4 ขั้นตอนในการเตรียมส่งข้อมูล:

  • เรียกใช้ method init() พร้อมพารามิเตอร์ MODEM_BAUD_RATE เพื่อกำหนดค่าเริ่มต้นอินเทอร์เฟซ Serial สำหรับ Modem
  • เรียกใช้ method waitForModemStart() เพื่อรอจนกว่า Modem จะตอบสนองต่อคำสั่ง AT commands
  • เรียกใช้ method waitForNetworkRegistration() เพื่อรอจนกว่า Modem จะสามารถเปิดช่องทางข้อมูลไปยังเซิร์ฟเวอร์ได้
  • ใช้ method deviceIdSet() เพื่อกำหนดรหัสประจำตัวอุปกรณ์ที่ไม่ซ้ำกันให้กับ SIM

ฟังก์ชัน loop() อาจประกอบด้วยโค้ดสำหรับรับข้อมูลและจัดรูปแบบ ส่วนที่น่าสนใจที่สุดคือการส่งคำร้องขอเพื่อส่งข้อมูลที่เข้ารหัสไปยังเซิร์ฟเวอร์ ซึ่งจะทำได้ง่ายเพียงแค่

byte res = enosim.dataSend(dataBuffer, dataLength);  

ดังนั้นคุณสามารถเพิ่มความปลอดภัยให้โปรเจกต์ของคุณด้วยการเข้ารหัส TLS1.3 ได้ง่ายๆ เพียงเพิ่มโค้ดแค่บรรทัดเดียวใน loop หลัก!

การควบคุมและการจำลอง (Control and simulation)

เครื่องมือฝั่ง Client ที่เป็น Open Source ซึ่งเขียนด้วย python3 สามารถใช้เพื่อควบคุม Pre-Shared keys, อัปโหลดการตั้งค่าอุปกรณ์ และวิเคราะห์ข้อมูลที่อุปกรณ์ดาวน์โหลด นอกจากนี้ยังสามารถจำลองเซสชันของ SIM เพื่ออัปโหลดข้อมูลทดสอบและดาวน์โหลดการตั้งค่าได้อีกด้วย

ในการติดตั้งเครื่องมือ ให้ clone repository enosim-cli แล้วรันคำสั่ง

cd enosim-cli
python3

ในการใช้งานเครื่องมือ คุณต้องขอข้อมูลความลับ (secrets) ต่อไปนี้จาก Pod:

  • TLSPROXY_KEYENC
  • API_USER
  • API_PASS
  • SIM_KEY

วิธีที่ดีที่สุดในการใช้งานคือการใส่ข้อมูลความลับทั้งหมดลงในไฟล์ config.yml ในโฟลเดอร์ iotsim-cli

ควรตั้งค่า DEVICE_ID ไว้ล่วงหน้าด้วย สำหรับการจำลองสามารถใช้ค่าใดก็ได้ แต่สำหรับการใช้งานจริง ค่านี้ต้องไม่ซ้ำกันในบรรดาอุปกรณ์ทั้งหมดที่คุณใช้

คุณสามารถจำลองอุปกรณ์ เช่น เซนเซอร์ก๊าซคาร์บอนไดออกไซด์ ได้โดยการส่งข้อมูลด้วยคำสั่ง

python3 enosim-cli simulate stc -j '{"co2": 340}'

คุณจะได้รับข้อความดังนี้

2021-06-30 13:03:13,093 - enosim - INFO - TLS1.3-PSK session established. Initialising operation.
2021-06-30 13:03:15,856 - enosim - INFO - b'{"co2":340,"iccid":"98xxxxxxxxxxxxxxxxxx","deviceid":"deb001deb002deb003"}'

บรรทัดสุดท้ายคือการตอบกลับจากเซิร์ฟเวอร์เพื่อยืนยันว่าได้รับข้อมูลอย่างถูกต้องแล้ว

ตอนนี้คุณสามารถดึงข้อมูลจากเซิร์ฟเวอร์ได้

python3 enosim-cli device getdata

และจะเห็นการตอบกลับจากเซิร์ฟเวอร์ดังนี้

2021-06-30 13:16:04,373 - enosim - INFO - [
{
"sim_attribute_update_id": 507,
"iccid": "89xxxxxxxxxxxxxxxx",
"deviceid": "deb001deb002deb003",
"createdAt": "2021-06-30",
"updatedAt": "2021-06-30",
"sim_attributes": [
{
"id": 679,
"sim_attribute_update_id": 507,
"key": "co2",
"value": "340",
"createdAt": "2021-06-30",
"updatedAt": "2021-06-30"
}
]
}
]

ค่าPSK ใน SIM และในเซิร์ฟเวอร์สามารถอัปเดตเป็นค่าที่ผู้ใช้กำหนดเองได้ ในการตั้งค่าใหม่ '404142434445464748494a4b4c4d4e4f' ให้เป็น PSK ใน SIM และอัปโหลดไปยังเซิร์ฟเวอร์ ให้ติดตั้งเครื่องอ่าน PCSC, เสียบ SIM เข้าไปในเครื่องอ่าน และใช้คำสั่งต่อไปนี้

python3 enosim-cli

เครื่องมือนี้ช่วยให้คุณได้ศึกษาเทคโนโลยีอย่างลึกซึ้ง และช่วย Debug แอปพลิเคชันฝั่งเซิร์ฟเวอร์ของคุณเอง หรือเชื่อมต่อกับแพลตฟอร์ม IoT ได้

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: device-friendly-tls-13-20c52d
299 บาท
PromptPay QR Code