Tink เองไม่ได้ผ่านการตรวจสอบ FIPS 140-2 อย่างไรก็ตาม ฟีเจอร์นี้รองรับอัลกอริทึมที่ได้รับการอนุมัติ FIPS 140-2 หลายรายการ และการใช้งานที่สำคัญสามารถใช้โมดูลการเข้ารหัสลับที่ผ่านการตรวจสอบ เช่น BoringSSLs BoringCrypto Tink มี WORKSPACE สำหรับการสร้าง BoringSSL ในโหมด FIPS
โปรดทราบว่าพื้นที่ทำงานไม่ได้ให้การรับประกันโดยพื้นฐานว่าการใช้ BoringSSL เป็นไปตามข้อกำหนดของ FIPS เราขอแนะนำให้คุณอ่านนโยบายความปลอดภัยอย่างเป็นทางการสำหรับ BoringCrypto
อัลกอริทึมที่รองรับ
อัลกอริทึมต่อไปนี้ใน Tink ได้รับอนุมัติตาม FIPS 140-2 (ดูข้อมูลเพิ่มเติมที่ FIPS 140-2 Annex A)
- การเข้ารหัสที่ตรวจสอบสิทธิ์แล้ว
- AES-GCM
- AES-CTR-HMAC-SHA256
- MAC
- HMAC SHA256
- AES-CMAC
- ลายเซ็นดิจิทัล
- ECDSA
- RSA-SSA-PKCS1
- RSA-SSA-PSS
โหมด FIPS เท่านั้นใน C++
หากคุณจำเป็นต้องใช้อัลกอริทึมที่ได้รับอนุมัติจาก FIPS 140-2 และการติดตั้งใช้งานที่ผ่านการตรวจสอบแล้ว คุณสามารถสร้าง Tink ในโหมดเฉพาะ FIPS ได้ ซึ่งจะจำกัดการใช้อัลกอริทึมที่ได้รับการอนุมัติและตรวจสอบว่า Tink ใช้โมดูลการเข้ารหัสลับที่ได้รับการตรวจสอบแล้วหรือไม่
ซึ่งเปลี่ยนลักษณะการทำงานของ Tink ในลักษณะต่อไปนี้
- ฟังก์ชัน
Register()
จะบันทึกเฉพาะอัลกอริทึมที่มีการติดตั้งใช้งานที่ตรวจสอบแล้วของ FIPS เท่านั้น ซึ่งหมายความว่าคุณจะใช้คีย์เซ็ตกับอัลกอริทึมที่ใช้โมดูลการเข้ารหัสที่ผ่านการตรวจสอบแล้วได้เท่านั้น - Tink ตรวจสอบว่า BoringSSL สร้างขึ้นด้วยโมดูล BoringCrypto หรือไม่
การเรียกไปยังรูปแบบพื้นฐานจะแสดงผลข้อผิดพลาด
INTERNAL
เมื่อโมดูลไม่พร้อมใช้งาน - การใช้แบบพื้นฐานใน
subtle/
จะจำกัดเฉพาะอัลกอริทึมที่ใช้โมดูลการเข้ารหัสที่ผ่านการตรวจสอบแล้วเท่านั้น
BoringCrypto
Tink ใช้ BoringCrypto ใน C++ เพื่อให้สิทธิ์เข้าถึงโมดูลการเข้ารหัสลับที่ได้รับการตรวจสอบแล้ว สถานะการตรวจสอบปัจจุบันกำหนดข้อจำกัดเพิ่มเติมต่อไปนี้สำหรับอัลกอริทึมที่พร้อมใช้งานเมื่ออยู่ในโหมด FIPS เท่านั้น
- AES-CMAC ยังไม่ได้รับการตรวจสอบและใช้ไม่ได้
- RSA-SSA-PKCS1 จำกัดไว้ที่โมดูลัส 3072 บิต
- RSA-SSA-PSS จำกัดไว้ที่โมดูลัส 3072 บิต
หากต้องการใช้โมดูล BoringCrypto กับ Bazel คุณจะยกเลิกการแสดงความคิดเห็นเกี่ยวกับคำจำกัดความของ local_repository
สำหรับ boringssl
ได้ใน C++
WorkSPACE
เปิดใช้ ณ เวลาที่คอมไพล์
หากต้องการสร้าง Tink ในโหมด FIPS เท่านั้น ให้ตั้งค่าแฟล็กในเวลาคอมไพล์ ดังนี้
bazel build ... --//third_party/tink/cc/config:use_only_fips=True
หากต้องการตรวจสอบขณะรันไทม์ว่า Tink สร้างขึ้นในโหมด FIPS เท่านั้นหรือไม่ คุณสามารถใส่ส่วนหัว internal/fips_utils.h
ซึ่งให้ค่าคงที่ kUseOnlyFips
หากคุณไม่ได้สร้าง Tink ในโหมด FIPS อย่างเดียว ระบบจะยังคงใช้การใช้งานที่ผ่านการตรวจสอบแล้วสำหรับอัลกอริทึมบางอย่างได้ แต่จะไม่จำกัดการใช้งานอัลกอริทึมอื่นๆ
เปิดใช้ขณะแสดง
นอกเหนือจากการสร้าง Tink ในโหมดเฉพาะ FIPS แล้ว คุณยังสามารถเรียกใช้ crypto::tink::RestrictToFips()
จาก config/tink_fips.h
ซึ่งจะตั้งค่าแฟล็กที่รันไทม์เพื่อเปิดใช้การจำกัดต่อ FIPS แบบพื้นฐาน
คำเตือน: หากคุณใช้ตัวเลือกรันไทม์ คุณต้องเรียกใช้ crypto::tink::RestrictToFips()
ก่อนที่จะจัดการกับเนื้อหาคีย์ใดๆ การลงทะเบียนเครื่องมือจัดการคีย์ หรือฟังก์ชันการทำงานของ Tink อื่นๆ นอกจากนี้ คุณต้องตรวจสอบว่า BoringSSL สร้างขึ้นด้วยโมดูล BoringCrypto ไม่เช่นนั้น Tink จะไม่อนุญาตให้คุณประมวลผลข้อมูล