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

เลเยอร์การรับส่งข้อมูลของ 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 สำหรับการโอนข้อมูล

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

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