Tink คืออะไร

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

Tink ช่วยให้ผู้ใช้ที่ไม่มีภูมิหลังเกี่ยวกับวิทยาการเข้ารหัสใช้งานวิทยาการเข้ารหัสลับทั่วไปได้อย่างปลอดภัย ที่ Google Tink ถูกติดตั้งใช้งานในผลิตภัณฑ์และระบบหลายร้อยรายการ

เหตุใดฉันจึงควรใช้ Tink

เหตุผลที่สำคัญที่สุดในการใช้ Tink ได้แก่

  • ใช้งานง่าย

    วิทยาการเข้ารหัสมีความถูกต้องได้ยาก เมื่อใช้ Tink คุณจะเข้ารหัสหรือลงนามข้อมูลด้วยการรับประกันความปลอดภัยในตัวได้โดยใช้โค้ดเพียงไม่กี่บรรทัด Tink ยังช่วยคุณหมุนเวียนคีย์หรือคีย์ความปลอดภัยโดยใช้ระบบการจัดการคีย์ภายนอก (KMS) ได้ด้วย

  • ปลอดภัย

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

  • เข้ากันได้

    ข้อความที่เข้ารหัส Tink เข้ากันได้กับไลบรารีวิทยาการเข้ารหัสที่มีอยู่ Tink ยังรองรับการเข้ารหัสหรือการจัดเก็บคีย์ใน Amazon KMS, Google Cloud KMS, คีย์สโตร์ Android และพวงกุญแจ iOS

ใครกำลังใช้ Tink

บริษัทหลายแห่งใช้ Tink ทั้ง Google, Square และ Citadel รวมถึงลูกค้า Google Cloud หลายร้อยรายและพาร์ทเนอร์ Google Pay Tink ยังขับเคลื่อนไลบรารี Jetpack Security ซึ่งให้บริการแอป Android ยอดนิยมมากมาย เช่น Slack, Adidas, AirBnb และ Nextdoor

เป้าหมายในอดีต

เป้าหมายหลักของ Tink เมื่อเทียบกับห้องสมุดวิทยาการเข้ารหัสอื่นๆ คืออะไร และกลไกหลักที่ Tink ใช้เพื่อให้บรรลุเป้าหมายเหล่านี้คืออะไร

สรุปคือ Tink มีเป้าหมาย 2 อย่างคือ

  1. ส่งเสริมความคล่องตัวในการเข้ารหัส: ผู้ใช้ควรเปลี่ยนคีย์และอัลกอริทึมได้ง่ายๆ
  2. เปิดใช้การตรวจสอบความปลอดภัย: Tink มุ่งอนุญาตให้ผู้ใช้เขียนโค้ดที่ตรวจสอบความปลอดภัยได้ในเครื่อง โดยมอบอินเทอร์เฟซที่รับประกันความปลอดภัยที่ชัดเจน

กลไกหลักที่ Tink ใช้เพื่อให้บรรลุเป้าหมายเหล่านี้มีดังนี้

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

ส่วนต่อไปนี้จะอธิบายแนวคิดเหล่านี้อย่างละเอียดยิ่งขึ้น

ความคล่องตัวในการเข้ารหัส

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

รีวิวด้านความปลอดภัยและทรัพย์สินในพื้นที่

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

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

class IdEncrypter {
  public static IdEncrypter createFromAead(Aead aead);

  public String encrypt(long id) throws GeneralSecurityException;
  public long decrypt(String encrypted) throws GeneralSecurityException;
};

การส่ง Aead จะได้รับพร็อพเพอร์ตี้ต่อไปนี้

  1. โค้ดจะสื่อสารว่าในการดำเนินงานนี้ IdEncrypter ต้องใช้รูปแบบการเข้ารหัสที่มีพร็อพเพอร์ตี้การรักษาความปลอดภัยที่Aeadจัดเตรียมไว้ให้ นอกจากนั้น DeterministicAead ก็อาจไม่เพียงพอ เนื่องจาก IdEncrypter กำหนดให้การเข้ารหัส 2 รายการที่มีรหัสเดียวกันแตกต่างกัน ในทางกลับกัน การรับอินสแตนซ์ของตัวเข้ารหัส AES GCM (อินสแตนซ์หนึ่งของ Aead) นั้นเข้มงวดเกินไป เพราะ Aead ใดก็ตามก็เพียงพอให้ IdEncrypter ทำงานแล้ว และไม่จำเป็นต้องมีอัลกอริทึมแบบใดแบบหนึ่งโดยเฉพาะ
  2. การตรวจสอบความปลอดภัยสามารถพิจารณาประเด็นนี้ได้ ผู้ตรวจสอบความปลอดภัยไม่จำเป็นต้องศึกษาที่เก็บโค้ดทั้งหมดเพื่อตรวจสอบว่ามีการสร้างคลาสย่อยของ Aead ซึ่งไม่ปลอดภัยสำหรับการใช้งานร่วมกับ IdEncrypter หรือไม่ แต่ Tink มีคุณสมบัติด้านความปลอดภัยที่ออบเจ็กต์ Aead ทั้งหมดมีแทน และผู้ตรวจสอบสามารถตรวจสอบได้ว่าสิ่งเหล่านี้เพียงพอหรือไม่

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