Tink를 사용하여 FIPS 140-2 보안 요구사항 충족

Tink 자체는 FIPS 140-2가 확인되었습니다. 하지만 여러 FIPS를 140~2개의 승인된 알고리즘과 기본 구현에서 활용할 수 있음 검증된 암호화 모듈 BoringSSLs BoringCrypto. Tink에는 WORKSPACE: FIPS 모드에서 BoringSSL을 빌드합니다.

작업공간에서 기본적으로 BoringSSL 사용이 보장되지는 않습니다. FIPS를 준수합니다. 자세한 내용은 공식 보안 정책이 있습니다.

지원되는 알고리즘

Tink의 다음 알고리즘은 다음에 따라 승인됩니다. FIPS 140-2 (자세한 내용은 FIPS 140-2 부록 A):

  • 인증된 암호화 <ph type="x-smartling-placeholder">
      </ph>
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC <ph type="x-smartling-placeholder">
      </ph>
    • HMAC-SHA256
    • AES-CMAC
  • 디지털 시그니처 <ph type="x-smartling-placeholder">
      </ph>
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

C++의 FIPS 전용 모드

FIPS 140-2 승인 알고리즘을 사용해야 하고 FIPS 전용 모드에서 Tink를 빌드할 수 있습니다. 이렇게 하면 Tink에 인증된 알고리즘 사용 Tink가 검증된 암호화 모듈입니다.

이에 따라 Tink의 동작이 다음과 같이 변경됩니다.

  • Register() 함수는 FIPS가 있는 알고리즘만 등록합니다. 도움이 될 수 있습니다 즉, 사용할 수 있는 서비스만 검증된 암호화 모듈을 사용하는 알고리즘의 키 세트입니다.
  • Tink는 BoringSSL이 BoringCrypto 모듈로 빌드되었는지 확인합니다. 프리미티브 호출은 모듈이 유효하지 않을 때 INTERNAL 오류를 반환합니다. 있습니다.
  • subtle/에서 프리미티브 사용은 암호화 모듈입니다.

BoringCrypto

BoringCrypto를 사용하는 Tink 를 사용하여 검증된 암호화 모듈에 대한 액세스를 제공합니다. 현재 유효성 검사 상태는 사용 가능한 FIPS 전용 모드에서 작동하는 경우:

  • AES-CMAC가 검증되지 않았으며 사용할 수 없습니다.
  • RSA-SSA-PKCS1은 3072비트 모듈러스로 제한됩니다.
  • RSA-SSA-PSS는 3072비트 모듈러스로 제한됨

Bazel과 함께 BoringCrypto 모듈을 사용하려면 C++에서 boringssl에 대한 local_repository 정의 작업공간.

컴파일 시간에 사용 설정

FIPS 전용 모드에서 Tink를 빌드하려면 컴파일 시간에 플래그를 설정합니다.

bazel build ... --//third_party/tink/cc/config:use_only_fips=True

Tink가 FIPS 전용 모드로 빌드되었는지 런타임에 확인하려면 다음과 같은 상수를 제공하는 internal/fips_utils.h 헤더를 포함할 수 있습니다. kUseOnlyFips입니다.

FIPS 전용 모드에서 Tink를 빌드하지 않아도 일부 알고리즘에 대해 검증된 구현을 사용하되 사용할 수 있습니다

런타임에 사용 설정

FIPS 전용 모드에서 Tink를 빌드하는 대신 플래그를 설정하는 config/tink_fips.hcrypto::tink::RestrictToFips() FIPS 프리미티브에 대한 제한을 사용하도록 설정합니다.

경고: 런타임 옵션을 사용하는 경우 crypto::tink::RestrictToFips() 는 키 자료를 처리하거나 키 관리자를 등록하기 전에 호출되어야 합니다. 다른 Tink 기능입니다. 또한 BoringSSL에 BoringCrypto 모듈로 빌드되었습니다. 그렇지 않으면 Tink를 사용하여 모든 데이터를 처리합니다