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

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 จะไม่อนุญาตให้คุณประมวลผลข้อมูล