Cryptology Academy · บทเรียน

Google Tink: การเข้ารหัสระดับสูงที่ปลอดภัย

ใช้ API ของ Tink ที่อิงกับชุดกุญแจเพื่อดำเนินการเข้ารหัสทั่วไปโดยไม่จำเป็นต้องมีความเชี่ยวชาญด้านการเข้ารหัส

บทเรียน 3 จาก 413 ขั้นตอน

Google Tink: การเข้ารหัสระดับสูงที่ปลอดภัย เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

ภาพรวมและแรงจูงใจของ Tink

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

การแยกส่วนโดยใช้ชุดคีย์

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

อินเทอร์เฟซ AEAD

อินเทอร์เฟซ AEAD (การเข้ารหัสที่ยืนยันความถูกต้องพร้อมข้อมูลประกอบ) ใน Tink มีการดำเนินการเข้ารหัสและถอดรหัส AeadFactory.getPrimitive(keyset) ส่งคืนออบเจ็กต์ Aead ส่วนการเรียก aead.encrypt(plaintext, associatedData) จะส่งคืนข้อความเข้ารหัส Tink จะเลือกอัลกอริทึมการเข้ารหัสโดยอัตโนมัติตามชุดคีย์ (เช่น AES-256-GCM) และสร้างนอนซ์แบบสุ่ม อินเทอร์เฟซนี้ซ่อนรายละเอียดอัลกอริทึมทั้งหมด การจัดการนอนซ์ และการเข้ารหัสรูปแบบข้อมูล

อินเทอร์เฟซ MAC

อินเทอร์เฟซ MAC ของ Tink มีการดำเนินการสำหรับสร้างและตรวจสอบรหัสยืนยันข้อความ MacFactory.getPrimitive(keyset) จะส่งคืนออบเจ็กต์ Mac ส่วน mac.computeMac(data) จะส่งคืนแท็กยืนยันตัวตน และ mac.verifyMac(tag, data) จะตรวจสอบแท็กดังกล่าว โดยโยนข้อยกเว้นด้านความปลอดภัยหากการตรวจสอบล้มเหลว อัลกอริทึมเริ่มต้นคือ HMAC-SHA256 อินเทอร์เฟซนี้ช่วยป้องกันข้อผิดพลาดทั่วไป เช่น การเปรียบเทียบ MAC ด้วยการตรวจสอบความเท่ากันของสตริงทั่วไป แทนการเปรียบเทียบที่ใช้เวลาเท่ากันเสมอ

อินเทอร์เฟซลายมือชื่อดิจิทัล

Tink มีอินเทอร์เฟซ PublicKeySign และ PublicKeyVerify แยกกันสำหรับลายมือชื่อดิจิทัล ออบเจ็กต์สำหรับลงลายมือชื่อและตรวจสอบจะสร้างมาจากแฮนเดิลชุดกุญแจคนละชุด โดยชุดหนึ่งเป็นกุญแจส่วนตัวและอีกชุดเป็นกุญแจสาธารณะตามลำดับ จึงป้องกันการใช้กุญแจส่วนตัวเพื่อตรวจสอบโดยไม่ตั้งใจ หรือใช้กุญแจสาธารณะในทางกลับกัน การใช้งาน Ed25519 และ ECDSA P-256 ของ Tink เป็นค่าเริ่มต้น และมี ECDSA แบบกำหนดผลลัพธ์ได้เพื่อหลีกเลี่ยงช่องโหว่จากความสุ่ม

อินเทอร์เฟซการเข้ารหัสแบบไฮบริด

อินเทอร์เฟซ HybridEncrypt และ HybridDecrypt ของ Tink ใช้ ECIES (รูปแบบการเข้ารหัสแบบผสานรวมด้วยเส้นโค้งวงรี) การเข้ารหัสแบบไฮบริดผสานการแลกเปลี่ยนกุญแจแบบอสมมาตรเข้ากับการเข้ารหัสแบบสมมาตร โดยผู้ส่งจะสร้างกุญแจชั่วคราว ดำเนินการ ECDH ด้วยกุญแจสาธารณะของผู้รับ สร้างกุญแจแบบสมมาตร แล้วเข้ารหัสด้วย AEAD วิธีนี้ช่วยให้สามารถเข้ารหัสข้อความขนาดใหญ่โดยใช้กุญแจแบบอสมมาตรได้ โดยไม่ต้องแบกรับภาระส่วนเกินของการเข้ารหัสแบบอสมมาตรล้วน ๆ

กระบวนการหมุนเวียนชุดกุญแจ

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

การทำให้ชุดกุญแจเป็นรูปแบบอนุกรม

ชุดกุญแจของ Tink ถูกทำให้เป็นรูปแบบอนุกรมในรูปแบบ JSON หรือ Protocol Buffer แบบไบนารี รูปแบบ JSON อ่านโดยมนุษย์ได้และมีประโยชน์สำหรับการแก้ไขจุดบกพร่อง ส่วนรูปแบบไบนารีมีขนาดกะทัดรัดกว่าและเหมาะสำหรับระบบจริง ชุดกุญแจที่ทำให้เป็นรูปแบบอนุกรมและมีคีย์ส่วนตัวต้องเข้ารหัสก่อนจัดเก็บ Tink รองรับการจัดเก็บชุดกุญแจที่เข้ารหัสด้วยการเข้ารหัสแบบสมมาตร AEAD มาตรฐาน หรือมอบหมายการจัดเก็บให้กับ KMS

การผสานรวม KMS สำหรับการเข้ารหัสชุดกุญแจ

Tink ผสานรวมกับผู้ให้บริการ KMS รายใหญ่ ได้แก่ AWS KMS, Google Cloud KMS และ HashiCorp Vault แทนที่จะเข้ารหัสชุดกุญแจด้วยกุญแจ AEAD ภายในเครื่อง Tink จะใช้ KMS ห่อหุ้มกุญแจเข้ารหัสชุดกุญแจ การเข้ารหัสชุดกุญแจจริงใช้กุญแจเข้ารหัสข้อมูล (DEK) ที่สร้างขึ้นภายในเครื่อง และ DEK จะถูกเข้ารหัสด้วยกุญแจเข้ารหัสกุญแจ (KEK) ของ KMS วิธีนี้เป็นไปตามรูปแบบการเข้ารหัสแบบห่อหุ้มที่ผู้ให้บริการคลาวด์ใช้

สตรีมมิง AEAD สำหรับไฟล์ขนาดใหญ่

AEAD มาตรฐานต้องโหลดข้อความทั้งหมดไว้ในหน่วยความจำเพื่อเข้ารหัสและถอดรหัส อินเทอร์เฟซ Streaming AEAD ของ Tink จะเข้ารหัสไฟล์ขนาดใหญ่เป็นส่วนย่อย ๆ ทำให้สามารถเข้ารหัสและถอดรหัสแบบสตรีมมิงได้โดยไม่ต้องเก็บข้อความธรรมดาทั้งหมดไว้ในบัฟเฟอร์ แต่ละส่วนย่อยได้รับการยืนยันความถูกต้องอย่างเป็นอิสระ และจะตรวจสอบลำดับกับความครบถ้วนของส่วนย่อยระหว่างการถอดรหัส วิธีนี้จำเป็นอย่างยิ่งสำหรับการเข้ารหัสข้อมูลสำรอง วิดีโอ และไฟล์ขนาดใหญ่อื่น ๆ

การรองรับภาษาและระบบนิเวศ

Tink พร้อมใช้งานสำหรับ Java, Python, Go และ C++ โดยมี API ที่สอดคล้องกับแนวทางของแต่ละภาษา การทำงานร่วมกันระหว่างภาษารับประกันได้ว่า ไฟล์ที่เข้ารหัสด้วย Tink ใน Python สามารถถอดรหัสด้วย Tink ใน Java ได้ ทำให้ Tink เหมาะสำหรับระบบที่มีบริการหลายตัวซึ่งเขียนด้วยภาษาต่างกันและจำเป็นต้องแลกเปลี่ยนข้อมูลที่เข้ารหัส Tink ยังผสานรวมกับบัฟเฟอร์โพรโทคอลเพื่อกำหนดค่าชุดกุญแจโดยรับประกันชนิดข้อมูล

การหมุนเวียนชุดกุญแจของ Tink

ระหว่างการหมุนเวียนชุดกุญแจของ Tink จะเกิดอะไรขึ้นกับข้อความเข้ารหัสที่เข้ารหัสด้วยกุญแจเก่า (ที่ไม่ใช่กุญแจหลัก)

สรุป Google Tink

สรุป Tink: นามธรรมที่อิงชุดกุญแจช่วยป้องกันการเปิดเผยกุญแจดิบ อินเทอร์เฟซ AEAD ซ่อนการจัดการ nonce และการเลือกอัลกอริทึม อินเทอร์เฟซ MAC ใช้การตรวจสอบที่ใช้เวลาเท่ากันเสมอภายใน อินเทอร์เฟซลายมือชื่อดิจิทัลและการเข้ารหัสแบบไฮบริดช่วยป้องกันการใช้อินเทอร์เฟซผิดวิธี การหมุนเวียนกุญแจเข้ากันได้กับเวอร์ชันก่อนหน้า โดยกุญแจเก่ายังใช้ถอดรหัสได้จนกว่าจะถูกลบ การผสานรวม KMS เป็นไปตามรูปแบบการเข้ารหัสแบบห่อหุ้ม สตรีมมิง AEAD รองรับไฟล์ขนาดใหญ่ และรับประกันการทำงานร่วมกันระหว่างภาษา

เริ่มต้นได้ฟรี

เรียนรู้ Cryptology Academy ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
67
บทเรียน
261

คำถามที่พบบ่อย

บทเรียน “Google Tink: การเข้ารหัสระดับสูงที่ปลอดภัย” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Google Tink: การเข้ารหัสระดับสูงที่ปลอดภัย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Google Tink: การเข้ารหัสระดับสูงที่ปลอดภัย”

ใช้ API ของ Tink ที่อิงกับชุดกุญแจเพื่อดำเนินการเข้ารหัสทั่วไปโดยไม่จำเป็นต้องมีความเชี่ยวชาญด้านการเข้ารหัส คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “Google Tink: การเข้ารหัสระดับสูงที่ปลอดภัย” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม

ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. libsodium: ไลบรารีการเข้ารหัสที่ลดความเสี่ยงจากการใช้งานผิดวิธี
  2. API ของ OpenSSL: โครงสร้างหลักและข้อผิดพลาดที่ควรระวัง
  3. Google Tink: การเข้ารหัสระดับสูงที่ปลอดภัย
  4. การตรวจสอบและคัดเลือกส่วนพึ่งพาด้านการเข้ารหัส
← กลับไปที่ Cryptology Academy