Tink는 암호화 전문가들이 작성한 오픈소스 암호화 라이브러리로 일하고 있습니다. Tink의 안전하고 간단한 API는 함정에 빠질 수 있습니다. 광범위한 테스트를 수행할 수 있습니다 이 페이지의 목표 섹션에서 Tink가 달성하고자 하는 목표에 대한 더 많은 유용한 정보를 제공합니다
Tink는 암호화 배경이 없는 사용자가 일반적인 암호화 작업을 수행합니다 Google에서는 Tink를 수백 개의 제품에 살펴봤습니다
Tink를 사용해야 하는 이유는 무엇인가요?
Tink를 사용하는 가장 중요한 이유는 다음과 같습니다.
사용이 간편함
암호화는 제대로 하기가 어렵습니다. Tink를 사용하면 다음을 사용하여 암호화 또는 데이터 서명 내장 보안 보장을 실행할 수 있습니다. 또한 Tink는 외부 키 관리 시스템을 사용한 키 또는 보안 키 순환 지원 (KMS)
안전함
Tink, BoringSSL과 같이 잘 알려진 라이브러리 위에 보안 보호 추가 Java 암호화 아키텍처에 대해 다루어 보고 덕분에 감사자와 툴이 빈틈을 빠르게 찾아낼 수 있습니다. 또한 Tink는 위험할 수 있으므로 모니터링하는 것이 좋습니다.
호환됨
Tink 암호문은 기존 암호화 라이브러리와 호환됩니다. 팅크 또한 BigQuery에서 키 암호화 또는 저장도 Amazon KMS, Google Cloud KMS, Android 키 저장소, iOS 키체인
누가 Tink를 사용하고 있나요?
Tink는 Google, Square, Citadel을 비롯한 많은 기업에서 널리 사용되고 있습니다. 수백 개의 Google Cloud 고객과 Google Pay 파트너를 찾아볼 수 있습니다. 또한 많은 인기 Android 앱을 보호하는 Jetpack Security 라이브러리를 지원합니다. Slack, 아디다스, 에어비앤비, Nextdoor 등입니다.
Tink 목표
다른 암호화 라이브러리와 비교했을 때 Tink의 주요 목표는 무엇인가요? 이러한 목표를 달성하기 위해 Tink에서 사용하는 기본 메커니즘은 무엇인가요?
간단히 말해 Tink에는 두 가지 목표가 있습니다.
- 암호화 민첩성 향상: 사용자는 키를 변경하고 살펴보겠습니다.
- 보안 검토 사용 설정: Tink는 사용자가 보안 명확한 설명을 제공하는 인터페이스를 제공하여 보안을 로컬에서 검토할 수 제공합니다.
Tink에서 이러한 목표를 달성하기 위해 사용하는 기본 메커니즘은 다음과 같습니다.
- Tink는 프리미티브와 인터페이스를 중요한 추상화로 제공합니다. 이러한 추상화를 통해 사용자는 정확한 코드를 지정하지 않는 코드를 작성할 수 있으며, 대신 예상되는 보안 개념을 지정합니다.
- Tink는 '키 세트'라는 개념을 사용합니다. 키 세트는 특정 프리미티브와 연결됩니다. 따라서 사용자는 여러 키를 사용할 수 있습니다
- Tink에서 키는 기본 키 자료로 지정될 뿐만 아니라 모든 매개변수가 포함됩니다. 즉, Tink 키는 항상 가능한 모든 암호화 기능 중에서 고유한 암호화 기능을 함수가 존재할 수 있고 해석의 여지가 없는 것입니다.
다음 섹션에서는 이러한 개념을 더 자세히 설명합니다.
암호화 민첩성
Google의 소프트웨어 엔지니어링을 고려해 보세요. 소프트웨어 엔지니어링 분야에서 배운 교훈을 다룬 책입니다. '시간이 지남에 따라 프로그래밍에서 배운 교훈'이라는 부제목이 있습니다. 그 안에서 저자는 사물이 변화한다는 사실의 의미를 충분히 설명할 수 있었습니다. 이 Tink 설계에도 많은 영향을 미쳤습니다. 암호화에서는 변화를 준비하는 것입니다. 키가 유출되고 알고리즘이 손상됩니다. 많은 사용자에게 키와 알고리즘을 전환할 수 있는 것이 중요하며, 신중을 기해야 합니다
보안 리뷰 및 지역 숙박 시설
Tink는 AEAD 인터페이스와 같은 인터페이스의 사용을 촉진하여 암호화할 수 있습니다 다른 보안 보장 중에서도 AEAD는 동일한 문자열의 여러 암호화가 사용됩니다.
이를 어떻게 사용할 수 있는지 알아보기 위해 엔지니어가 민감한 정보를 사용자 쿠키의 ID입니다. 다음과 같은 클래스를 제공할 수 있습니다.
class IdEncrypter {
public static IdEncrypter createFromAead(Aead aead);
public String encrypt(long id) throws GeneralSecurityException;
public long decrypt(String encrypted) throws GeneralSecurityException;
};
Aead
를 전달하면 다음 속성을 얻습니다.
- 코드는
IdEncrypter
가 작업을 실행하려면Aead
가 제공하는 보안 속성이 있는 암호화 스키마입니다. 이와 달리DeterministicAead
드림 충분하지 않을 것입니다.IdEncrypter
는 같은 ID가 다르다는 것을 의미합니다. 반면에 AES GCM 암호화 (Aead
의 특정 인스턴스 하나)가 지나치게 많음 엄격: 모든 Aead는IdEncrypter
가 작업을 수행하기에 충분하며, 하나의 특정 알고리즘이어야 합니다. - 보안 검토 시 이 점을 고려할 수 있습니다. 보안 검토자는
전체 코드 저장소를 모두 검토하여
누군가 사용하기에 안전하지 않은
Aead
의 서브클래스를 생성함IdEncrypter
. 대신 Tink는 보안 속성을 제공하여 Aead 객체에 포함되고, 검토자는 이것들이 충분한지 확인할 수 있습니다.
특히 두 번째 포인트는 많은 주의가 필요합니다. 사용자는 종종
아직 완벽하지는 않지만 Aead
이전 요점은
이는 위험합니다.Aead
필요한 보안 보증을 제공하지 않으면 IdEncrypter
가 안전하지 않을 수 있으며
보안 검토를 수행하는 엔지니어가 추가 코드를 검사해야 하고
객체가 올바르게 인스턴스화되었는지 확인합니다.