특히 AES와 결합 된 GCM (Galois / Counter Mode)은 수년 동안 사실상의 황금 표준이었습니다. 한 단계로 암호화하고 인증합니다. “너무 굉장합니다. AEAD와 같은 용어는 소녀에게 좋은 인상을주기에 적합하므로 윈윈 할 수 있습니다.하지만 농담은 제쳐두고 …
나는 무엇이 그렇게 특별하게 만드는지 항상 궁금했고, 오래 생각할수록 이해가 줄어 들었습니다. 보시면 전체적인 마법은 “전혀 굉장하지 않습니다. 또는 어쩌면 너무 멍청해서 그럭저럭 할 수 없습니다 (그러므로 내 질문).
내 생각 :
먼저, GCM은 카운터 모드 의 한 형태입니다. 즉, 예를 들어와는 다릅니다. 암호 블록 체인, 한 블록의 출력은 정확히 하나의 입력 블록에 의존합니다. 더 나쁜 점은 단일 비트를 수정할 수 있으며 해독 된 결과는 해당 비트에서 정확히 다릅니다. 솔직히 카운터 모드의 블록 암호는 ” 블록 암호 “가 아니라 (키가 지정된) PRNG이기 때문입니다. XOR 연산이 뒤 따릅니다. 기본적으로 ” 블록 형 ” 스트림 암호입니다. 누군가 이것을 악용하여 유해한 방식으로 메시지를 변경할 수있는 시나리오를 상상하는 것은별로 필요하지 않습니다 (예 : ” 거래 변경 : +5,000 \ $ ” to ” transaction : -5,000 \ $ “). 블록 암호는 일반적으로 완전한 의미없는 말로 변하는 타고난 속성을 가지고 있습니다. 하나의 비트를 뒤집을 때 (더하기, 연결을 통해 메시지의 전체 나머지 부분을 포함) 실제로는 아주 훌륭하고 바람직한 속성입니다. 우리가 정당한 이유없이 배 밖으로 던졌습니다.
물론입니다. , 위의 공격은 탬 퍼링이 발견되기 때문에 달성하기 어렵습니다. 그러나 기본적으로 인증자는 작업 모드 선택 도입 문제 만 수정합니다.
GHASH는 추가 인증 데이터를 지원하는 MAC입니다. 내가 말할 수있는 바로는, 그것은 명백한 거짓말입니다. 아니면 ” 낙관적 인 과장 “이라고 부르세요. 비 직관적 인 수학 (비 수학자에게)이 뒤에있는 압축 함수이지만 결국 간단한 곱셈을 수행하고 ” 오버플로 “. 좀 더 평범한 수학을 사용하면 블록 당 두 줄의 C 코드로 12주기 내에 수행 할 수 있습니다 (또는 64 비트가 아닌 32 비트 곱셈을 사용해도 괜찮다면 AVX2와 같이 병렬로 수행 할 수 있습니다. ” s vpmulld for two complete blocks in ~ 4 cycles).
아직 IDEA를 기억하는 사람들은 덧셈 모드 2 16 와 곱셈 모드 2 16 +를 사용했음을 기억할 것입니다. 1은 되돌릴 수있는 좋은 속성을 가진 S-box로 사용됩니다 (복호화를 원할 경우 필요함). 불행히도 2 32 +1은 “ta”가 아니기 때문에 32 비트로 확장 할 수 없습니다. 소수입니다. 따라서 모든 입력이 상대적으로 소수가되는 것은 아닙니다. 따라서 연산을 반전시키는 데 문제가 있습니다.하지만 … 우리의 경우에는 아주 괜찮습니다. 원하지 않습니다 압축 함수를 뒤집을 수 있습니다. 정말 ” 간단한 ” 일반 곱셈도 트릭을 수행해야합니까?
그래서 간단하고 특별하지도 않고 마법도없는 압축 함수 키와 IV로 초기화 될 수 있으며, 이는 부수적으로 최종 출력이 어떤 식 으로든 키에 종속되도록 만듭니다. 일반적인 기능이 효과적으로 MAC이됩니다. ” 추가 데이터 “가있는 경우 데이터를 암호화하기 전에 해시에 입력하기 만하면됩니다. 다시 말하지만, 이것은 매우 특별한 것이 아닙니다.
전반적으로 다른 모든 해시 함수 로도 달성 할 수없는 것은 아닙니다.
이제 Galois / counter는 카운터 모드를 사용한다고 가정합니다. 카운터 모드 (및 그 파생물)와 GHASH는 블록을 병렬로 암호화 / 복호화 할 수 있다는 장점이 있습니다. 또한 GHASH는 사소한 병렬화가 가능합니다.
예, 성능 !하지만 솔직히 말해서 이것이 정말로 장점입니까 아니면 큰 단점 입니까?
기가 바이트 또는 테라 바이트 크기의 암호를 해독하는 데 걸리는 시간이 중요합니까? 메시지를 얼마나 잘 병렬화 할 수 있습니까? 아니면 임의의 위치를 ” 찾을 ” 절대적으로 원하는 애플리케이션이 있습니까? 글쎄요, 그것이 중요 할 수있는 응용 프로그램이 있습니다. 전체 디스크 암호화가 떠 오릅니다. 그러나 입력 크기와 출력 크기가 동일하기를 원하기 때문에이 경우 GCM을 사용하고 싶지 않을 것입니다.
바쁜 서버 (또는 VPN)의 경우 중요 할 것입니다. 또는 그렇게 보일 것입니다. 하지만 동시 연결이 많기 때문에 어쨌든 모든 항목 을 병렬로 처리 할 수 있습니다.따라서 하나 스트림을 병렬화 할 수 있는지 여부는 전반적으로 실제로 차이가 없습니다. 연결이 거의없는 애플리케이션은 어떻습니까? 글쎄, 일반적으로 로그인 터미널을 통해 테라 바이트의 데이터를 전송하지 않습니다. 그렇게한다면 7-8 년 된 데스크탑 프로세서에서도 단일 코어 성능이 GbE 대역폭을 쉽게 초과하므로 인터넷 연결이 여전히 제한 요소 일 수 있습니다. .
좋습니다. 하드 디스크에서 암호화 된 2TB 7z 파일을 추출 할 때 2-3 초 더 기다려야 할 수 있습니다 (만약 수천 개의 디렉토리 항목을 생성하는 것이 실제로 병목 현상이 아닌 경우 작년에 얼마나 자주 그렇게 했습니까? 나 : 0 번.
실제로 변화를 일으키는 유일한 사람은 ” 나쁜 사람들 “, 즉 당신이 쉬운 삶을 원하지 않는 사람들입니다. 물론 사소하게 병렬화 할 수 있다면 공격이 훨씬 쉬워집니다. 문제에 전용 하드웨어 (GPU, FPGA 등)로 가득 찬 방을 던져 버리십시오. 노드 간 통신이 필요하지 않습니까? 음, 완벽하네요. 더 나아질 수는 없어요.
이게 정말 장점인가요? 모르겠어요. 제겐 큰 단점 인 것 같아요. 가능하다면 병렬화를 가능한 한 어렵게 만들고 싶습니다. 가능한 한 쉽지 않습니다.
그래서 … 충분히 숙고하고 다음 질문에 대해 생각해보십시오.
GCM에 대해 내가 놓친 근본적인 점이 너무 멋져서 절대적으로 사용해야할까요?
댓글
- 하지만 ” 나쁜 사람들 ” 은 정의 할 수 없습니다. 이는 정부의 권장 사항과이 포럼의 답변에 큰 영향을 미칩니다.
답변
TL; DR : GCM은 오늘날 암호화 (AEAD)에서 기대하는 최고의 보안 속성으로 뛰어난 성능을 제공합니다.
GCM은 CTR을 사용하여 스트림 암호를 만듭니다. 이 방법은 잘 연구 된 방법으로 단 한 가지 단점이 있습니다. 비트 플립 핑을 방지하려면 인증이 절대적으로 필요합니다. GCM 이전에는 CTR-then-MAC가 해결책이었습니다. 스트림 암호의 주요 이점 중 하나는 패딩 공격이 없다는 것입니다 (패딩이 필요하지 않기 때문입니다). 또 다른 장점은 AES-CTR이 AES-NI 지침의 이점을 누릴 수 있다는 것입니다.
GCM은 성능이 더 좋은 CTR-then-MAC입니다. CRT-then-MAC에 비해 한 가지 주요 개선 사항은 암호화 및 인증 실행을 겹치는 기능입니다. 또한 구체적인 보안 모델에서 안전한 것으로 입증되었으며 특허에 의해 방해받지 않으므로 “사용하기가 쉽지 않습니다.
몇 가지 단점이 있습니다. 임베디드 하드웨어에서는 효율적이지 않습니다. 효율적으로 구현하기 어렵습니다. 마지막 요점은 다른 사람이 작성한 라이브러리를 사용하는 것입니다. 그러나 이것이 xchacha20-poly1305가 GCM보다 인기를 얻은 이유입니다.
댓글
- ChaCha20이 인기를 얻은 또 다른 이유는 AES가 아닌 때문이라고 생각합니다. ‘ 오해하지 마세요. AES 훌륭한 알고리즘이지만 말 그대로 모든 계란을 한 바구니에 넣는 것이 가장 현명한 아이디어는 아닐 수 있습니다. 그리고 AES를 제외하고 잘 테스트 된 다른 알고리즘을 사용하는 것은 매우 가치가 있습니다
- @ MechMK1 동의합니다. ,하지만 ChaCha20 ‘의 인기 이유는 모두 라고 쓰지 않았습니다. 왜냐하면 ‘ 여기에서 묻는 질문이 아닙니다. GCM은 OP가 생각하는 것처럼 ” 멋진 “로 간주되지 않습니다.
- 절대 사실입니다. ‘ 황금 거위는 아니지만 AES-GCM을 사용하여 해고 된 사람은 없습니다.
- 그리고 ‘는 특허에 의해 방해받지 않습니다.
- @StephenTouset 감사합니다. 귀하의 의견을 포함하도록 게시물을 수정했습니다.
답변
먼저, GCM은 카운터 모드의 한 형태입니다. 즉, 예를 들어와는 다릅니다. 암호 블록 체인, 한 블록의 출력은 정확히 하나의 입력 블록에 의존합니다. 더 나쁜 점은 단일 비트를 수정할 수 있으며 해독 된 결과는 해당 비트에서 정확히 다릅니다. 솔직히 말하면 카운터 모드의 블록 암호는 “블록 암호”가 아니라 (키가 지정된) PRNG와 XOR 연산이 뒤 따르는 것입니다. 기본적으로 “블록 형”스트림 암호입니다. 누군가가 이것을 악용하여 유해한 방식으로 메시지를 변경할 수있는 시나리오를 상상하는 데 많은 시간이 걸리지 않습니다 (예 : “transaction : +5,000 \ $”를 “transaction : -5,000 \ $”로 변경).
CTR 위에 GCM 레이어가있는 메시지 인증으로 인해 가단성이 중요하지 않습니다.
블록 암호는 일반적으로 단일 비트를 뒤집을 때 완전한 횡설수설로 변하는 타고난 속성을 가지고 있습니다 (더하기 연결을 통해 메시지의 나머지 전체를 포함). . 그것은 실제로 아주 훌륭하고 바람직한 재산입니다. 우리는 정당한 이유없이 배 밖으로 내던졌습니다.
이것은 아주, 아주 잘못된 것입니다. 우선 , CBC 모드는 또한 일종의 가단성 약점을 가지고 있습니다. 암호문을 한 비트 뒤집 으면 한 블록 및 넷 블록의 해당 비트를 뒤집습니다. CBC에 대한 다른 가단성 공격이 있습니다 (예 : EFail 공격 참조).
보다 일반적으로 “완전한 횡설수설로 변하는”메시지에 대한 비공식적 인 아이디어는 충분하지 않습니다. 우리는 암호화 된 메시지가 위조되었을 때 확실한 “예 / 아니오”응답으로 기계적으로 감지 할 컴퓨터가 절대적으로 필요합니다. 사람이 “무의미한 말”을 발견 할 수있을만큼 일찍 루프에 들어올 것이라고 믿는 것만으로는 충분하지 않습니다.
GHASH는 추가 인증 데이터를 지원하는 MAC입니다. 내가 말할 수있는 바로는 그것은 명백한 거짓말이다. 아니면 “낙관적 인 과장”이라고 부르십시오. 비 직관적 인 수학 (비 수학자에게)이 뒤에있는 압축 함수일 뿐이지 만 결국에는 단순한 곱셈을 수행하고 “오버플로”에 해당하는 입력 비트의 절반을 버립니다.
사용자가 수학을 이해하지 못하기 때문에 MAC은 작동하지 않습니다. 이는 사람들이 위성 TV를 시청할 수 없다고 말하는 것과 같습니다. “미적분을 모릅니다. 유한 필드 MAC은 수십 년 동안 알려진 표준 구조입니다.
더 평범한 수학을 사용하여 두 줄의 C로 수행 할 수있는 것은 무엇입니까? 블록 당 코드는 12주기 이내입니다 (또는 64 비트가 아닌 32 비트 곱셈을 사용해도 괜찮은 경우, 예를 들어 AVX2의 vpmulld를 사용하여 ~ 4주기의 완전한 블록 2 개에 대해 병렬로 수행 할 수 있습니다).
GHASH와 같은 Galois 필드를 기반으로하는 MAC 또는 Poly1305와 같은 프라임 필드를 기반으로하는 MAC이 더 실용적인 선택인지에 대한 실제 논쟁이 있습니다. 대부분은 트레이드 오프에 달려 있습니다. 소프트웨어와 하드웨어 구현을 강조하기 위해 MAC을 설계하는 것 사이에 있습니다. 예를 들어 Galois 필드 곱셈은 소프트웨어에서는 악몽이지만 하드웨어의 산술 곱셈보다 훨씬 간단합니다. 절충의 좋은 부분은 전력 분석과 같은 부 채널 공격에 대한 취약성에 달려 있습니다. .
그러나 Galois 필드 또는 프라임 필드가 근본적으로 unsou인지 여부에 대해서는 논쟁 할 필요가 없습니다. nd. 수학은 두 가지 모두를 확인합니다.
예, 성능! 하지만 솔직히 말해서 이것이 정말로 장점입니까, 아니면 오히려 큰 단점입니까?
그것을 수십 년 동안 끊임없이 행진하는 엔지니어들에게 성능 때문에 제품에 암호화를 추가하는 것을 거부했습니다. “강력한 PC 만 생각하지 마십시오.” 임베디드 장치를 생각하고 사물 인터넷을 무서워하십시오.
내 말은, 이것은 전혀 죽은 문제가 아닙니다. 지난 몇 년 동안 저사양 Android 기기에서 전체 디스크 암호화를 지원하기위한 새로운 암호화 구성의 개발 과 격렬한 논쟁이있었습니다. Android가 이전에 제공 한 AES 기반 알고리즘에 비해 강력하지 않습니다.
[성능]이 실제로 차이를 만드는 유일한 사람은 “나쁜 사람”입니다. 평범하게 병렬화 할 수 있다면 공격이 훨씬 쉬워집니다. 문제에 전용 하드웨어 (GPU, FPGA 등)로 가득 찬 방을 던져 버리십시오.
암호는 암호의 속도를 늦추는 것이 아니라 충분히 큰 키 크기를 사용하여이 문제를 해결합니다.”비밀번호 기반 암호화를 사용하지 않는 경우 문제가 발생합니다. “충분히 엔트로피 비밀 키가 없습니다. 256 비트 대칭 키는 우리 우주의 무차별 대입 공격을 물리 칠 수있을만큼 영원히 커질 것입니다.
무엇입니까? GCM에 대해 내가 놓친 근본적인 점이 너무 멋져서 절대적으로 사용해야할까요?
꼭 GCM을 사용할 필요는 없습니다. . 동시에 :
- Fundamentall y 소리가 나고 하드웨어에서 매우 광범위하게 지원됨
- 소프트웨어 성능 저하 및 nonce 재사용에 대한 치명적인 진위성 실패와 같이 사용자가 제기하지 않은 여러 단점으로 인해 일부 실제 상황에서 종종 실격 처리됩니다. .
기본 AES-GCM을 지원하는 하드웨어와이를 활용하는 잘 감사 된 소프트웨어가 있다면이를 최고의 후보에 포함하지 않는 것이 현명하지 않습니다.