Mobile Security via Flutter — ตอนที่ 3 วิธี Secure API ตอน 2/2 ภาคอวสาน
จากบทความที่แล้วที่ได้พูดถึงหลักการของการทำ Secure API ว่าจะต้องเตรียมตัวอะไรกันบ้างก่อนทำส่วนนี้ ในบทความนี้ผมจะนำโค้ดเกี่ยวกับวิธี Implement ด้วย Flutter มาให้ดูกันครับ โดยเราจะทำตามคอนเซ็ปต์ของ Digital Signature แบ่งออกมาเป็น 5 ขั้นตอนจากที่อ้างอิงไว้ครั้งที่แล้ว
- Key Exchange
- Encrypt Body
- Create Hashing Signature
- Decrypt Body
- Checking Code Integrity From Signature
ผมขอโชว์ 4 ข้อแรกให้ดู เพราะข้อสุดท้ายจะเป็นทางด้านของ Backend
Key Exchange
สามารถใช้ Lib ตามด้านล่างได้เลยครับ อันนี้จะเป็นของ curve25519
ด้านล่างคือตัวอย่างของโค้ด Handshake
ซึ่งฟังก์ชันนี้จะเป็นสิ่งแรกที่เราจะใช้เมื่อ Client ได้ทำการเชื่อมต่อกับ Backend เมื่อโค้ดส่วนนี้ทำงาน เราจะได้ String กลับมา ซึ่งเราจะใช้เป็น Key ในการทำ Encrypt ข้อมูลทุกประเภทก่อนส่งไปให้เซิร์ฟเวอร์ครับ อย่าบันทึก Key นี้ลงในเครื่องนะครับ Key จะใช้ได้จนถึง Token หมดอายุ
Encrypt Body, Create Hashing Signature and Decrypt Body
ตามหลักการคือเราเข้ารหัสข้อมูลทุกประเภทที่จะส่งไปให้เซิร์ฟเวอร์ด้วย Key ที่ได้จากการ Handshake ใช้คู่กับ IV ที่เก็บใน Memory ของเครื่อง ส่วนนี้ห้ามทำการบันทึกไว้เช่นกัน เสร็จแล้วให้ส่งข้อมูลที่เข้ารหัส พร้อมกับค่า Nounce และ TimeStamp เพื่อป้องกัน Replay Attack และส่ง Content ที่ทำการ Hash แล้วไปด้วย เพื่อทำการเช็คความถูกต้องของข้อมูลว่าไม่ได้ถูกทำการแก้ไขใดๆ จากนั้นทางเซิร์ฟเวอร์จะส่งข้อมูลกลับมา โดยข้อมูลดังกล่าวจะถูกทำการเข้ารหัสเช่นเดียวกัน เราจะต้องทำการถอดรหัสก่อนที่จะนำข้อมูลมาใช้ ซึ่งตรงส่วน Client ไม่ต้องเช็ค Replay Attack หรือ Integrity ใดๆนะครับ เพราะเราเชื่อเซิร์ฟเวอร์ได้ว่าไม่ถูกทำการปลอมแปลง ด้านล่างที่เห็นจะเป็น Sample Code ที่สามารถนำไปใช้ได้จริงๆ สำหรับการเข้ารหัสและถอดรหัสข้อมูล
เราสามารถใช้ฟังก์ชัน postAPI เพื่อทำการถอดรหัสและเข้ารหัสข้อมูลได้เลยครับ ซึ่งข้อมูลที่ได้กลับมาหลังจากถอดรหัสแล้วจะเป็น JSON
เป็นยังไงกันบ้างครับ จากที่อ่านมาทั้งหมด ไม่ยากเท่าที่ควรเลยใช่ไหมครับ ถ้าเทียบกับฟีเจอร์ใหญ่ๆ 1 อัน ถ้าคุณได้ทำตาม Mobile Security Series ครบทั้งหมด ผมเชื่อว่าแอปของคุณจะมีความปลอดภัยสูงทีเดียว ทั้งนี้ก็อาจจะยังไม่ถึงที่สุด ถ้าคุณต้องการแอปที่มีความปลอดภัยสูงสุด ผมแนะนำว่าให้ใช้แนวทางที่ผมเขียนไว้ ประกอบกับนำไปปรึกษากับทางทีม Security ของคุณ เพื่อเสริมความแข็งแกร่งให้ยิ่งขึ้นไปอีก เพราะแนวทางที่ผมให้เป็นแนวทางจากผู้พัฒนาแอปเท่านั้น ซึ่งผมก็ไม่ได้เป็นผู้เชี่ยวชาญด้าน Security แต่อย่างใด อาจจะยังมีจุดอ่อนบางอันที่สามารถแกะเข้าไปได้ ซึ่งผมเชื่อว่าทีม Security ของคุณจะช่วยปิดจุดอ่อนเหล่านี้ได้แน่นอนครับ
ขอบคุณครับที่ติดตามกันมาจนถึงตอนจบของซีรีย์ Mobile Security นี้ ผมหวังว่าบทความที่เขียนมานี้จะช่วยทำให้แอปคุณปลอดภัยยิ่งขึ้น และปกป้องลูกค้าแสนดีของคุณได้นะครับ 😙
อ่านซีรีย์ Mobile Security via Flutter ย้อนหลัง:
- Ep.1 SSL Pinning
- Ep.2 Strong Device/ Strong Pin
- Ep.3 Secure API Pt.1
สำหรับชาวเทคคนไหนที่สนใจเรื่องราวดีๆแบบนี้ หรืออยากเรียนรู้เกี่ยวกับ Product ใหม่ๆ ของ KBTG สามารถติดตามรายละเอียดกันได้ที่เว็บไซต์ www.kbtg.tech