ECB 암호화를 사용하면 안되는 ' 이유는 무엇입니까?
On 2월 18, 2021 by adminJava를 사용하여 암호화 된 문자열을 생성하고 있으며 빌드시 다음 경고가 표시됩니다.
ECB 암호화 모드를 사용하면 안됩니다.
그래서 ECB를 사용하지 않아야하는 이유와 대신 사용할 수있는 것이 궁금합니다. ?
댓글
- 댓글은 확장 토론 용이 아닙니다.이 대화는 채팅으로 이동되었습니다. .
- 줌으로 작업하십니까?;)
답변
“ECB 암호화를 사용하지 않는 이유는 무엇입니까?
ECB 모드 암호화를 사용하지 않는 주된 이유는 의미 적 보안 — 즉, ECB 암호화 된 암호문을 관찰하는 것만으로도 일반 텍스트에 대한 정보가 유출 될 수 있습니다. 임의의 긴 일반 텍스트를 허용하는 모든 암호화 체계는 어느 정도 유출됩니다.
특정 즉, ECB 모드의 문제는 ECB 모드를 사용하여 일반 텍스트의 동일한 블록 (8 바이트 또는 16 바이트 또는 기본 암호의 블록 크기가 큼)을 암호화하면 항상 동일한 암호문 블록이 생성된다는 것입니다. 이를 통해 공격자는 다음을 수행 할 수 있습니다.
- 두 ECB 암호화 메시지가 동일한 지 감지
- 두 ECB 암호화 메시지가 공통 접두사를 공유하는지 감지
- 두 개의 ECB 암호화 메시지가 블록 경계에 정렬되어있는 한 다른 공통 하위 문자열을 공유하는지 여부를 감지합니다. 또는
- 단일 ECB 암호화 메시지에 반복적 인 데이터 (예 : 긴 공백 또는 널 바이트, 반복 된 헤더 필드 또는 텍스트에서 우연히 반복되는 문구)가 포함되어 있는지 여부 (및 위치)를 감지합니다.
Wikipedia에는이 약점에 대한 멋진 그래픽 데모 가 있습니다. 여기서 동일한 (원시, 압축되지 않은) 이미지가 ECB 모드와 의미 론적으로 안전한 암호화 모드 (예 : CBC, CTR, CFB 또는 OFB) :
이 시나리오는 다소 인위적이지만 (일반적으로 이와 같은 원시 이미지를 암호화하지 않음) ECB 모드의 문제를 잘 보여줍니다. 입력 이미지의 반복 영역은 암호화 된 출력에서 반복적 인 패턴을 생성하므로 암호화에도 불구하고 이미지의 많은 대규모 기능을 계속 인식 할 수 있습니다. 현실에서는 ECB를 공격하는 암호 분석가 기반 암호화 스키마는 암호문의 16 진 덤프에서 이러한 패턴을 찾을 가능성이 더 높지만 원칙은 동일합니다.
실제 데이터 손상에 기여하는 ECB 암호화의 약점에 대한 실제 사례는 다음과 같습니다. 이 답변 에 설명 된대로 2013 년 Adobe 비밀번호 데이터베이스 유출 에 의해 제공되었습니다. 여기서 유출의 심각성에 기여하는 한 가지 요소는 올바르게 해싱 하는 대신 Adobe가 ECB 모드를 사용하여 비밀번호를 암호화했다는 것입니다. 이를 통해 공격자는 여러 계정에서 공유하는 비밀번호를 빠르게 찾거나 다른 비밀번호 (예 : password1 및 password2 )와 공통 접두사를 공유 할 수 있으며 각 비밀번호의 대략적인 길이도 공개했습니다.
ECB 암호화 모드에는 “매우 가단성 이라는 사실과 같은 다른 약점이 있습니다. 평문 블록은 별도로 암호화되므로 공격자는 이전에 관찰 된 암호문의 블록을 연결하여 새로운 유효한 암호문을 쉽게 생성 할 수 있습니다.
그러나 가단성은 메시지 인증 코드 는이 상황에서 다른 모든 인증되지 않은 암호화 모드 <에서 어느 정도 공유됩니다. / a>는 앞서 언급 한 CBC, CTR, CFB 및 OFB와 같습니다. 따라서 ECB 모드의 특정 약점으로 간주 할 수 없습니다. ECB 모드가 사용됩니다.
대신 무엇을 사용해야합니까?
인증 된 암호화 a를 사용해야합니다. > 모드 (예 : GCM , EAX 또는 OCB .
개인적으로 짧은 메시지의 경우 SIV 모드 를 선호합니다 ( RFC 5279 )는 추가 오용 방지 계층을 제공합니다. (많은 다른 암호화 모드는 동일한 IV / nonce가 실수로 여러 메시지를 암호화하는 데 사용되는 경우 다소 심하게 손상됩니다. SIV 모드는 암호화 된 메시지가 동일한 지 여부를 제외하고이 상황에서 모든 보안 속성을 유지합니다.)
기존의 의미 상 보안 암호화 모드 (예 : CBC 또는 CTR ), 암호화를 사용하여 메시지 인증 코드 (예 : HMAC )와 결합 -then-MAC 건설. (즉, 먼저 메시지를 암호화 한 다음 암호문의 MAC을 계산하여 암호문에 추가해야합니다.) 메시지 암호 해독을 시도하기 전에 MAC을 확인하는 한이 구성은 다음으로부터 사용자를 보호합니다. 활성 (선택된 암호문) 공격에 대한 이러한 모드의 다양한 취약성.
디스크 암호화 또는 부품 수정 기능이 필요한 유사한 애플리케이션의 경우 모든 데이터를 다시 암호화하지 않고 암호문의 경우 XTS 와 같이 해당 용도로 설계된 암호 모드를 사용해야합니다. 이러한 모드는 일반적으로 적극적인 공격에 대한 저항력이 부족하며 사용하기 전에 이해해야하는 다른 약점이있을 수 있습니다. 가능한 경우 해시 트리 의 MAC과 같은 일종의 무결성 보호와 결합되어야합니다.
댓글
- 데이터 저장소의 블록을 임의의 순서로 읽고 쓸 수 있기를 원하는 경우, 가급적이면 all-ones 블록 맵을 all- 블록? 내 경향은 블록 번호의 매우 간단한 해시로 블록 데이터를 xoring하고, 올원 블록을 생성하는 경우 xor 작업을 실행 취소 / 반복하고, 결과에 ECB를 사용하고, 결과의 보완으로 xoring하여 암호화하는 것입니다. All-ones 블록을 암호화하는 것 [보완은 각 키에 대해 한 번만 계산하면 됨]. 그게 좋은 접근 방식 같나요?
- @supercat : 그 ' 기본적으로 디스크 암호화 ,이를 위해 설계된 모드를 사용할 수 있습니다. XTS는 모든 디스크 암호화 모드와 마찬가지로 한계가 있지만 (사용하기 전에 이해해야하는) XTS가 좋은 선택이라고 생각합니다. 가능하다면 능동적 인 공격을 방어하기 위해 일종의 MAC과 결합해야합니다.
- @IlmariKaronen : " don ' ECB를 사용하지 않는 것은 " 약간 과잉입니다. 위험을 이해하지만 여러 번 (문서-암호화중인 문서가 '별로 비밀이 아니며 공격자가 ' 너무 많은 기능 등), 괜찮을 것입니다.
- @giorgim : ' 정말 좋은 이유 가 없습니다. ECB를 사용합니다 (다른 모드의 빌딩 블록으로 제외). 거의 모든 암호화 라이브러리는 최소한 CBC 또는 CTR 모드를 제공하며 그렇지 않은 경우 ' 직접 구현하기가 어렵습니다. 그 위에 HMAC (또는 CMAC)를 두드리면 ' 갈 수 있습니다.
- @giorgim : 그렇지 않더라도 ' 사용 가능한 MAC 또는 AE 모드가 아무 없습니다. CBC를 사용하는 것이 여전히 ECB보다 낫습니다. MAC 기능이있는 경우 CBC-then-MAC는 완벽한 AE 모드입니다.
답변
ECB 모드는 동일한 메시지 블록 (즉, 블록-암호를 호출 할 때마다 암호화 된 데이터의 양)을 동일한 암호문 블록으로 암호화하므로 사용해서는 안됩니다. 이는 동일한 메시지 블록이 여러 번 암호화되었는지 여부를 나타 내기 때문에 문제가됩니다. Wikipedia에는이 문제 에 대한 매우 멋진 그림이 있습니다.
댓글
- 댓글 확장 된 논의를위한 것이 아닙니다. 이 대화는 채팅으로 이동 되었습니다.
답변
@Guut Boy가 언급했듯이 ECB는 동일한 블록을 가진 메시지가 암호화 된 경우 공격자가 CipherText를 관찰하는 것만으로 일반 텍스트에 대한 정보를 확보 할 수 있다는 점에서 의미 상 안전하지 않습니다.
긴 메시지를 암호화하려면 CBC 모드를 사용하는 것이 좋습니다.이 모드는 IV (Initial Value)라는 추가 매개 변수를 도입하며, 동일한 메시지를 두 번 암호화하는 경우 공격을 방지하기 위해 세션 번호로 초기화합니다.
설명
- IV는 초기 값이 아닌 초기화 벡터를 나타냅니다.
- 1. 이것은 좋은 조언이 아닙니다. 인증은 암호화 전문가의 약 10 년의 조언을 무시합니다. Ilmari Karonen이 권장하는 것처럼 인증 된 암호화를 사용하는 것이 더 좋습니다. 2.이 답변은 Ilmari Karonen '에 의해 대체 된 것 같습니다. 답변.
- 그 외에도 IV는 공격자가 예측할 수 없어야합니다 (예 : 무작위와 구별 할 수 없음),이 답변은 일반적으로 무작위가 아닌 세션 번호를 사용해야한다고 말합니다.
답글 남기기