디지털 서명

디지털 서명을 사용하면 누구도 데이터를 조작하지 않는지 확인할 수 있습니다. 이는 서명된 데이터의 신뢰성과 무결성을 제공하지만 보안성은 제공하지 않습니다. 비대칭입니다. 즉, 한 쌍의 키 (공개 키와 비공개 키)를 사용합니다.

서명에는 다음과 같은 속성이 있습니다.

  • 진위성: 비공개 키가 없으면 PublicKeyVerify.Verify(signature, message)를 검증하는 서명을 만들 수 없습니다.
  • 비대칭: 서명을 만들 때는 확인하는 것과 다른 키를 사용합니다. 이렇게 하면 직접 서명을 만들 수 없는 당사자에게 공개 키를 배포하여 서명을 확인할 수 있습니다.

비대칭이 필요하지 않으면 더 간단하고 효율적인 MAC를 사용하는 것이 좋습니다.

디지털 서명 기능은 Tink에서 한 쌍의 프리미티브로 표현됩니다.

  • PublicKeySign 데이터 서명에 사용됩니다.
  • PublicKeyVerify: 서명을 확인합니다.

키 유형 선택

대부분의 사용 사례에 ECDSA_P256을 사용하는 것이 좋지만 다양한 옵션이 있습니다. 일반적으로 다음과 같은 사항이 적용됩니다.

  • ECDSA_P256은 가장 널리 사용되는 옵션이자 합리적인 기본값입니다. 하지만 ECDSA 서명은 마존 가능합니다.
  • ED25519는 확정적 서명을 만들고 ECDSA_P256보다 우수한 성능을 제공합니다.
  • RSA_SSA_PKCS1_3072_SHA256_F4는 확정적 서명을 만들고 최상의 확인 성능을 제공합니다 (그러나 서명은 ECDSA_P256 또는 ED25519보다 훨씬 느립니다).

최소한의 보안 보장

  • 부호할 데이터의 길이는 임의적일 수 있습니다.
  • 타원 곡선 기반 체계에 관한 적응형 선택된 메시지 공격에 관한 128비트 보안 수준
  • RSA 기반 체계에 관한 적응형 선택된 메시지 공격에 대응하는 112비트 보안 수준 (2048비트 키 허용)

사용 사례

데이터에 디지털 서명하고 싶습니다를 참고하세요.

가동성

서명 체계는 공격자가 이미 서명된 메시지에 관해 다른 유효한 서명을 만들 수 있다면 가변적입니다. 이는 대부분의 시나리오에서 문제가 되지 않지만 프로그래머가 유효한 서명이 고유하다고 암시적으로 가정하는 경우가 있으며 이로 인해 예기치 않은 결과가 발생할 수 있습니다.