ใช้ Tink เพื่อให้เป็นไปตามข้อกำหนดด้านความปลอดภัย FIPS 140-2

ตัวจิ๊กเองไม่ ตรวจสอบ FIPS 140-2 แล้ว แต่ก็รองรับ FIPS หลายรายการ อัลกอริทึมที่ได้รับอนุมัติ 140-2 ตัวและการใช้งานพื้นฐานสามารถใช้ประโยชน์จาก โมดูลการเข้ารหัสลับที่มีการตรวจสอบ เช่น BoringSSLs BoringCrypto ทิงก์มีองค์ประกอบ WORKSPACE สำหรับการสร้าง BoringSSL ในโหมด FIPS

โปรดทราบว่าพื้นที่ทำงานไม่ได้ให้การรับประกันในตัวว่าการใช้ BoringSSL ของคุณ เป็นไปตามข้อกำหนดของ FIPS เราขอแนะนำให้คุณอ่าน นโยบายความปลอดภัยสำหรับ BoringCrypto แล้ว

อัลกอริทึมที่รองรับ

อัลกอริทึมต่อไปนี้ใน Tink ได้รับอนุมัติตาม FIPS 140-2 (ดูข้อมูลเพิ่มเติมที่ FIPS 140-2 ภาคผนวก A):

  • การเข้ารหัสที่ได้รับการตรวจสอบสิทธิ์
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC
    • HMAC-SHA256
    • AES-CMAC
  • ลายเซ็นดิจิทัล
    • ECDSA
    • RSA-SSA-PKCS1 (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 Primitives

คำเตือน: หากคุณใช้ตัวเลือกรันไทม์ crypto::tink::RestrictToFips() ต้องถูกเรียกใช้ก่อนที่จะจัดการกับเนื้อหาคีย์ใดๆ ลงทะเบียนเครื่องมือจัดการคีย์ หรือ ฟังก์ชันอื่นๆ ของ Tink นอกจากนี้ คุณต้องตรวจสอบว่า BoringSSL มี สร้างขึ้นด้วยโมดูล BoringCrypto มิฉะนั้น Tink จะไม่อนุญาตให้คุณ ประมวลผลข้อมูลใดก็ได้