Tink เป็นไลบรารีการเข้ารหัสแบบโอเพนซอร์สซึ่งเขียนโดยนักเข้ารหัสลับและ วิศวกรความปลอดภัยที่ Google API ที่ปลอดภัยและใช้งานง่ายของ Tink ช่วยลด อันตรายด้วยการออกแบบ ที่เน้นผู้ใช้เป็นหลัก การใช้งานอย่างรอบคอบ และการตรวจสอบโค้ด และการทดสอบที่ครอบคลุม ดูส่วนเป้าหมายในหน้านี้สำหรับ มีข้อมูลเชิงลึกเกี่ยวกับวัตถุประสงค์ที่ Tink ได้รับการออกแบบมาเพื่อบรรลุผล
Tink ช่วยให้ผู้ใช้ที่ไม่มีพื้นฐานด้านวิทยาการเข้ารหัสลับสามารถติดตั้งใช้งานได้อย่างปลอดภัย งานการเข้ารหัสลับ ที่ Google มีการใช้ Tink ในผลิตภัณฑ์หลายร้อยรายการ และระบบต่างๆ
ทำไมฉันจึงควรใช้ Tink
เหตุผลสำคัญที่สุดในการใช้ Tink มีดังนี้
ใช้งานง่าย
วิทยาการเข้ารหัสลับจะเข้าใจได้ยาก Tink ช่วยให้คุณ เข้ารหัสหรือข้อมูลสัญญาณด้วย รับประกันความปลอดภัยในตัวโดยใช้โค้ดเพียงไม่กี่บรรทัด Tink ยัง ช่วยคุณหมุนเวียนคีย์หรือคีย์ความปลอดภัยโดยใช้ระบบการจัดการคีย์ภายนอก (KMS)
ปลอดภัย
Tink เพิ่มการรักษาความปลอดภัยด้วยไลบรารีที่รู้จักกันดี เช่น BoringSSL และ Java Cryptography Architecture และแสดงในอินเทอร์เฟซโดยตรง เพื่อให้ผู้ตรวจสอบและเครื่องมือพบช่องโหว่ได้อย่างรวดเร็ว Tink ยังแยก API ที่ อาจเป็นอันตราย คุณจึงติดตามดูได้
ใช้ได้กับ
ข้อความเข้ารหัสของ Tink ใช้งานได้กับไลบรารีวิทยาการเข้ารหัสลับที่มีอยู่ หมึก ยังรองรับการเข้ารหัสหรือจัดเก็บคีย์ไว้ใน Amazon KMS, Google Cloud KMS, Android Keystore และพวงกุญแจ iOS
ใครกำลังใช้ Tink
บริษัทหลายแห่งใช้ Tink อย่างกว้างขวาง ซึ่งรวมถึง Google, Square และ Citadel รวมถึงลูกค้า Google Cloud และพาร์ทเนอร์ Google Pay หลายร้อยราย Tinkด้วย ขับเคลื่อนไลบรารี Jetpack Security ซึ่งรักษาความปลอดภัยของแอป Android ยอดนิยมจำนวนมาก เช่น Slack, Adidas, AirBnb และ Nextdoor
เป้าหมาย Tink
อะไรคือเป้าหมายหลักของ Tink เมื่อเทียบกับไลบรารีการเข้ารหัสอื่นๆ และ อะไรคือกลไกหลักที่ Tink ใช้เพื่อให้บรรลุเป้าหมายเหล่านี้
กล่าวโดยสรุป Tink มีเป้าหมาย 2 ประการ ได้แก่
- เพิ่มความคล่องตัวในการเข้ารหัส: ผู้ใช้ควรเปลี่ยนคีย์ได้ อัลกอริทึมได้ง่ายๆ
- เปิดใช้การตรวจสอบความปลอดภัย: Tink มีจุดประสงค์เพื่อให้ผู้ใช้เขียนโค้ดได้ สามารถตรวจสอบความปลอดภัยได้จากภายใน ด้วยอินเทอร์เฟซ ที่จะให้ข้อมูล รับประกันความปลอดภัย
กลไกหลักที่ Tink ใช้เพื่อบรรลุเป้าหมายเหล่านี้มีดังต่อไปนี้
- Tink ให้ปัจจัยพื้นฐานและอินเทอร์เฟซเป็นนามธรรมที่สำคัญ เหล่านี้ แอบสแตรกชันช่วยให้ผู้ใช้เขียนโค้ดได้ซึ่งไม่ได้ระบุ แต่จะระบุแนวคิดด้านความปลอดภัยที่คาดหวังแทน
- Tink ใช้แนวความคิดของ "ชุดคีย์" ซึ่งเป็นชุดคีย์ที่ ที่เกี่ยวข้องกับพื้นฐานที่เฉพาะเจาะจง ซึ่งส่งผลให้ผู้ใช้เขียนโค้ด ซึ่งใช้ได้กับหลายคีย์
- ใน 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
จะได้รับพร็อพเพอร์ตี้ต่อไปนี้
- โค้ดนี้สื่อสารกันว่า
IdEncrypter
จะทำงานได้ก็ต่อเมื่อ การเข้ารหัสที่มีพร็อพเพอร์ตี้ความปลอดภัยที่Aead
มีให้ อีกวิธีหนึ่งคือDeterministicAead
อาจไม่เพียงพอIdEncrypter
กำหนดให้มีการเข้ารหัสสองแบบของ รหัสเดียวกันนั้นต่างกัน ในทางกลับกัน การใช้ เป็นพารามิเตอร์ เป็นตัวอย่าง การเข้ารหัส AES GCM (Aead
อินสแตนซ์หนึ่ง) จะทำงานมากเกินไป เข้มงวด: Aead ก็เพียงพอที่IdEncrypter
จะทำงานแล้ว ต้องเป็นอัลกอริทึมที่เฉพาะเจาะจงรายการหนึ่ง - การตรวจสอบความปลอดภัยสามารถพิจารณาประเด็นนี้ได้ ผู้ตรวจสอบความปลอดภัยจะ
ไม่จำเป็นต้องดูที่เก็บโค้ดทั้งหมดเพื่อตรวจสอบว่า
มีคนสร้างคลาสย่อยเป็น
Aead
ซึ่งไม่ปลอดภัยสำหรับการใช้งาน ด้วยIdEncrypter
แต่ Tink จะให้คุณสมบัติด้านความปลอดภัยที่ ออบเจ็กต์ Aead และผู้ตรวจสอบสามารถตรวจสอบว่าสิ่งเหล่านี้เพียงพอแล้ว
ประเด็นที่ 2 ต้องมีการดูแลอย่างมาก ผู้ใช้มักขอเพิ่ม
อัลกอริทึมที่ "ยังไม่ใช่" Aead
ประเด็นก่อนหน้านี้แสดงให้เห็นว่า
เป็นอันตราย: หากมีการปรับใช้ Aead
ซึ่ง
ไม่ให้การรับประกันความปลอดภัยที่จำเป็น IdEncrypter
อาจไม่ปลอดภัย
และวิศวกรที่ดำเนินการตรวจสอบความปลอดภัยต้องตรวจสอบโค้ดเพิ่มเติม
เพื่อตรวจสอบว่าสร้างอินสแตนซ์อ็อบเจกต์อย่างถูกต้อง