실제로 Tink는 Key
객체를 제공하여
Parameters
를 나타내는 키 및 Parameters
객체
예를 들어 Java에는 AesGcmKey
객체가 있습니다.
AES GCM 키를 나타냅니다.
이 섹션에서는 이러한 객체가 Java에서 어떻게 디자인되고 어떻게 사용되는지 설명합니다. 상호작용합니다.
객체 Parameters
개
널리 사용되는 AEAD 암호화 스키마인 AES GCM을 생각해 보세요.
Tink는 AesGcmParameters
객체에 필요한 정보를 제공하여
AesGcmKey
를 만듭니다. 이 내용은 나중에 설명하겠습니다.
Java의 매개변수 계층 구조는 다음과 같습니다.
public abstract class Parameters {
public abstract boolean hasIdRequirement();
}
public abstract class AeadParameters extends Parameters {}
public final class AesGcmParameters extends AeadParameters {
/**
* The Variant specified how ciphertexts are [tagged](/tink/design/keysets#tagging_ciphertexts).
*/
public static final class Variant {...}
/** A helper object to create new AesGcmParameters. */
public static final class Builder {...}
public int getKeySizeBytes() {...}
public int getIvSizeBytes() {...}
public int getTagSizeBytes() {...}
public Variant getVariant() {...}
public OutputPrefixType getOutputPrefixType() {...}
public boolean equals(Object object) {...}
public int hashCode() {...}
}
이 섹션에 설명된 대로
키 세트, 암호 텍스트 태그 지정
일부 키에는 키 세트에 있을 때 ID에 대한 요구사항이 있습니다. 매회
Parameters
객체에는 hasIdRequirement
이 Parameters
객체에서 만든 키에 필수 ID가 있는지 여부를 결정합니다.
다음으로 AesGcmParameters
객체는 getKeySizeBytes()
메서드를 제공합니다.
getIvSizeBytes()
, getTagSizeBytes()
이 함수는
사용된 키, 사용된 IV의 길이, 생성된 태그의 길이
바이트 단위로 표시됩니다. Tink는 완전성을 위해 이러한 함수 중 일부를 제공하지만
모든 선택 항목에 대해 Aead
생성을 항상 허용하지는 않습니다. 예를 들어, 현재
AES GCM에서는 12바이트 IV만 지원됩니다.
AesGcmParameters
객체는 이전 항목의 재정의도 제공합니다.
정의된 메서드 (및 Java 표준 메서드 equals
및 hashCode
)
이는 좋은 관행으로 간주됩니다.
마지막으로 새 AeadParameters
객체를 만드는 정적 메서드를 제공합니다.
이는 입력의 유효성을 검사합니다. 즉, 크기가 16, 24,
또는 32입니다.
키 객체
Tink에는 키 계층 구조도 있습니다. AES GCM의 예에서 남은 것은 :
public abstract class Key {
public abstract Parameters getParameters();
public abstract @Nullable Integer getIdRequirementOrNull();
public abstract boolean equalsKey(Key other);
}
public abstract class AeadKey extends Key {
public abstract AeadParameters getParameters();
public abstract Bytes getOutputPrefix();
}
public final class AesGcmKey implements AeadKey {
public SecretBytes getKeyBytes();
public abstract Bytes getOutputPrefix();
public AesGcmParameters getParameters();
public @Nullable Integer getIdRequirementOrNull();
public boolean equalsKey(Key object);
}
getIdRequirementOrNull
메서드는 이 키에 필요한 ID를 반환합니다.
또는 요구사항이 없는 경우 null
입니다.
(이 키에 대한 이러한 요구사항은 경우에 따라 Tink가
0x01<id>
문자열로 암호문 또는 서명을 접두사로 사용하는 경우 이 섹션을 참조하세요.
(암호문 태그 지정에서)
이는 항상
getParameters().hasIdRequirement()
및 새
이를 보장해야 합니다
Key
의 구현은 equalsKey
메서드도 제공해야 합니다.
비교할 수 있습니다. 이러한
메서드가 유용할 때가 많습니다. 예를 들어 키 파생을 테스트할 때
도함수를 반복적으로 적용하여
동일한 키 객체에 액세스할 수 있습니다 또한 KMS는
여러 사용자에게 동일하게 제공하는 것이 좋습니다.
동일한 KMS에 여러 번 업로드). 주목할 만한 점은
Java 메서드 equals
를 재정의하지 마세요. 재정의를 하려면
hashCode
를 재정의하고 안전한 환경에서 hashCode
를 구현할 방법이 없습니다.
검증되지 않은 가정 없이 equals
와 호환되는 방식으로 작동합니다.
다음으로 getParameters()
메서드가 필요합니다. 이를 통해 사용자는
원래 정보를 수집합니다.
마지막으로 AesGcmKey
에는 원시 키 자료를 반환하는 getKeyBytes
메서드가 있습니다.
이러한 메서드는 키 클래스에서 매우 일반적입니다. 유형에 따라 다르며,
기본 키 자료에 대한 액세스를 제공합니다 이를 통해 사용자는
원칙적으로 허용(예: 키로 표현되는 프리미티브를 구현하고
키를 직렬화하거나 직렬화하여 디스크에 저장하거나
네트워크에 속합니다. 키 자체는 키 자료를 암호화 할 수 없습니다.
무단 액세스를 방지할 수 있습니다. 예를 들어 SecretBytes
는 다음을 위해 액세스 토큰이 필요합니다.
제공하는 자료는
(액세스 제어 참조).
비대칭 키
비대칭 프리미티브의 경우 Tink는 두 개의 Key 클래스(비공개용과 1개)를 사용합니다. 공개 키에서 사용할 수 있습니다 매개변수의 경우 클래스를 생성할 수 있습니다 (키를 생성하는 데 사용할 수 있는 클래스가 하나뿐이기 때문).
Tink에는 추가PrivateKey
함수 getPublicKey()
.