รักษาความปลอดภัยของข้อมูลข้อความด้วยการเข้ารหัสจากต้นทางถึงปลายทาง

Transport Layer ของ Android รวมถึงการเชื่อมต่อทั้งหมดระหว่างเซิร์ฟเวอร์, ส่วนหลังของ FCM และอุปกรณ์ไคลเอ็นต์จะได้รับการรักษาความปลอดภัยโดยใช้ Transport Layer Security (TLS) ซึ่งจะช่วยให้ข้อมูลทั้งหมดได้รับการเข้ารหัสจากต้นทางถึงปลายทางอย่างแน่นหนาในระหว่างการส่งข้อมูล เพื่อป้องกันไม่ให้ข้อมูลถูกดักฟังในเครือข่าย โมเดลความปลอดภัยที่มีประสิทธิภาพนี้เหมาะสำหรับแอปพลิเคชันส่วนใหญ่ ดูรายละเอียดเพิ่มเติมได้ในเอกสารประกอบสถาปัตยกรรม FCM

ข้อจำกัดอย่างหนึ่งของการเข้ารหัสแบบจุดต่อจุดคือการเข้ารหัสไม่ครอบคลุมเส้นทางทั้งหมด โดยมีเพียงผู้ส่งและผู้รับเท่านั้นที่ถอดรหัสข้อความได้ ด้วยเหตุนี้ FCM จึงแนะนำให้ใช้การเข้ารหัสจากต้นทางถึงปลายทางสำหรับการสื่อสารที่คำนึงถึงความเป็นส่วนตัว เช่น ข้อความแชทหรือธุรกรรมการตรวจสอบสิทธิ์ หากต้องการใช้การเข้ารหัสจากต้นทางถึงปลายทางให้ได้ประโยชน์สูงสุด คุณต้องใช้การเข้ารหัสนี้ในระดับที่สูงขึ้น เช่น ภายในเซิร์ฟเวอร์และโค้ดของแอป

เพิ่มการเข้ารหัสจากต้นทางถึงปลายทางสำหรับข้อมูลที่ละเอียดอ่อน

สำหรับแอปพลิเคชันที่จัดการข้อมูลที่มีความละเอียดอ่อนเป็นพิเศษ เช่น ข้อความส่วนตัวหรือ ข้อมูลเข้าสู่ระบบส่วนตัว คุณสามารถเพิ่มการปกป้องอีกชั้นด้วยการเข้ารหัสจากต้นทางถึงปลายทาง (E2EE) กระบวนการนี้เกี่ยวข้องกับการเข้ารหัสเพย์โหลดของข้อความในเซิร์ฟเวอร์ก่อน ส่งไปยัง FCM และการถอดรหัสภายในแอปในอุปกรณ์ของผู้ใช้ ซึ่งใช้ได้กับข้อความข้อมูล FCM เนื่องจากระบบปฏิบัติการจะจัดการเพย์โหลดการแจ้งเตือนมาตรฐาน และแอปของคุณจะถอดรหัสไม่ได้ ก่อนที่จะแสดง

โปรดทราบว่า FCM ไม่มีโซลูชันในตัวสำหรับการเข้ารหัสจากต้นทางถึงปลายทาง คุณมีหน้าที่รับผิดชอบในการติดตั้งเลเยอร์ความปลอดภัยนี้ภายในแอปพลิเคชัน มีไลบรารีและโปรโตคอลภายนอกที่ออกแบบมาเพื่อวัตถุประสงค์นี้ เช่น Capillary หรือ DTLS

ตัวอย่างเชิงแนวคิด

ต่อไปนี้คือวิธีที่เพย์โหลดของ FCM data เปลี่ยนแปลงเมื่อใช้ E2EE

ก่อนการเข้ารหัส (เพย์โหลดมาตรฐาน):

    {
      "token": "DEVICE_REGISTRATION_TOKEN",
      "data": {
        "sender": "user123",
        "message_body": "Your 2FA code is 555-123",
        "timestamp": "1661299200"
      }
    }

หลังการเข้ารหัส (เพย์โหลด E2EE):

  {
    "token": "DEVICE_REGISTRATION_TOKEN",
    "data": {
      "encrypted_payload": "aG9va2Vk...so much encrypted gibberish...ZW5jcnlwdA=="
    }
  }

หากคุณติดตั้งการเข้ารหัสจากต้นทางถึงปลายทางอย่างถูกต้อง แอปพลิเคชันไคลเอ็นต์จะเป็น เพียงฝ่ายเดียวที่ถอดรหัสเพย์โหลดที่เข้ารหัสเพื่อแสดงข้อความต้นฉบับได้

ทางเลือก: การดึงเนื้อหาจากเซิร์ฟเวอร์โดยตรง

หากการเข้ารหัสจากต้นทางถึงปลายทางไม่เหมาะกับแอป คุณสามารถส่งข้อความข้อมูลว่างแทนได้ ข้อความเหล่านี้ทำหน้าที่เป็นสัญญาณให้แอป ดึงข้อมูลเนื้อหาจากเซิร์ฟเวอร์ของคุณโดยตรง ซึ่งหมายความว่าระบบจะส่งข้อมูลที่ละเอียดอ่อนระหว่างแอปและเซิร์ฟเวอร์ของคุณเท่านั้น โดยจะข้าม FCM สำหรับการโอนข้อมูล

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

ดังนั้น ให้พิจารณาทางเลือกด้านประสบการณ์ของผู้ใช้สำหรับสถานการณ์ที่การดึงข้อมูลอาจใช้เวลานานเกินไป เช่น คุณอาจแสดงการแจ้งเตือนทั่วไป เช่น "คุณมีข้อความใหม่" แล้วอัปเดตเมื่อดึงเนื้อหาทั้งหมด แล้ว