문제

다음을 사용하는 것이 좋습니다. 초기화 벡터 내 데이터를 암호화/해독하려면?상황을 더욱 안전하게 만들까요?사례별로 평가해야 하는 사항 중 하나인가요?

이를 실제 상황에 적용하기 위해 Win32 암호화 기능은 CryptSetKeyParam 암호화/암호 해독 전에 키에 초기화 벡터를 설정할 수 있습니다.다른 API에서도 이를 허용합니다.

일반적으로 권장되는 것은 무엇이며 그 이유는 무엇입니까?

도움이 되었습니까?

해결책

둘 이상의 메시지를 암호화하는 데 동일한 키가 사용될 수 있는 경우 IV가 필수적입니다.

그 이유는 대부분의 암호화 모드에서는 동일한 키로 암호화된 두 개의 메시지를 함께 분석할 수 있기 때문입니다.예를 들어, 간단한 스트림 암호에서 동일한 키로 암호화된 두 암호문을 XOR하면 두 메시지가 XOR되며, 여기서 일반 텍스트는 기존 암호 분석 기술을 사용하여 쉽게 추출할 수 있습니다.

약한 IV는 WEP를 깨뜨릴 수 있게 만드는 요소 중 하나입니다.

IV는 기본적으로 동일한 키가 두 번 사용되는 것을 방지하기 위해 일부 고유하고 비밀이 아닌 데이터를 키에 혼합합니다.

다른 팁

대부분의 경우 IV를 사용해야 합니다.IV는 매번 무작위로 생성되므로 동일한 데이터를 두 번 암호화하면 암호화된 메시지가 달라지며 관찰자는 이 두 메시지가 동일한지 말할 수 없습니다.

CBC 모드의 사진(아래 참조)을 잘 살펴보세요.IV를 아는 공격자는 이전 블록을 아는 공격자와 같다는 것을 빨리 깨닫게 될 것입니다. 암호문 (그렇습니다. 그들은 이미 그것에 대해 많이 알고 있습니다).

내가 말하는 것은 다음과 같습니다.IV=0의 "문제" 대부분은 다음과 같은 경우 블록 암호화 모드의 일반적인 문제입니다. ~하지 않다 데이터 무결성을 보장합니다.진실성을 보장해야 합니다.

내가하는 일은 다음과 같습니다.강력한 체크섬(암호화 해시 또는 HMAC)을 사용하고 암호화하기 전에 일반 텍스트 앞에 추가하세요.알려진 첫 번째 암호문 블록이 있습니다.체크섬이 없는 동일한 IV이고 다른 백만 가지 이유로 체크섬이 필요합니다.

마지막으로:CBC와 스트림 암호 사이의 비유는 그다지 통찰력이 있는 IMHO가 아닙니다.

CBC 모드 사진만 보시면 깜짝 놀라실 것 같아요.

사진은 다음과 같습니다.

http://en.wikipedia.org/wiki/Block_cipher_modes_of_Operation

링크 텍스트

HTTP Digest Auth에 대한 글을 찾았습니다(RFC 2617) IV/nonce의 사용과 필요성을 이해하는 데 매우 도움이 됩니다.

여러 개의 서로 다른 비밀 패턴에 대해 동일한 키를 여러 번 사용하면 암호화된 결과에 나타날 수 있습니다.의사 무작위여야 하고 각 키에 한 번만 사용되어야 하는 IV는 결과를 난독화하기 위해 존재합니다.동일한 키를 사용하여 동일한 IV를 두 번 사용하면 안 됩니다. 그러면 목적이 무산됩니다.

IV를 추적하는 데 신경 쓸 필요가 없도록 하려면 가장 간단한 방법은 IV를 결과 암호화된 비밀 앞에 추가하는 것입니다.그렇게 하면 그것에 대해 많이 생각할 필요가 없습니다.그러면 첫 번째 또는 마지막 N 비트가 IV라는 것을 항상 알 수 있습니다.

비밀을 해독할 때 IV를 분할한 다음 이를 키와 함께 사용하여 비밀을 해독합니다.

사례별로 평가 해야하는 것들 중 하나입니까?

예, 그렇습니다.사용 중인 암호와 입력이 어떻게 보일 것으로 예상되는지 항상 읽어보세요.일부 암호는 IV를 사용하지 않지만 보안을 위해 솔트가 필요합니다.IV는 길이가 다를 수 있습니다.암호화 모드는 IV가 사용되는 용도(사용하는 경우)를 변경할 수 있으며 결과적으로 보안을 유지해야 하는 속성(무작위, 고유, 증분?)을 변경할 수 있습니다.

일반적으로 대부분의 사람들은 'Cipher Block Chaining'이라는 모드에서 AES-256 또는 유사한 블록 암호를 사용하는 데 익숙하기 때문에 권장됩니다.이는 많은 엔지니어링 용도에 적합하고 합리적인 기본 설정이며 적절한(반복되지 않는) IV가 필요합니다.이 경우 선택 사항이 아닙니다.

IV를 사용하면 공격자가 암호화된 텍스트를 해독하기가 더 어렵도록 일반 텍스트를 암호화할 수 있습니다.사용하는 IV의 각 비트는 주어진 일반 텍스트에서 암호화된 텍스트의 가능성을 두 배로 늘립니다.

예를 들어, 한 문자 길이의 IV를 사용하여 'hello world'를 암호화해 보겠습니다.IV는 'x'로 무작위로 선택됩니다.그런 다음 암호화된 텍스트는 'xhello world'이며 'asdfghjkl'과 같습니다.다시 암호화하려면 먼저 새 IV를 생성하고(이번에는 'b'를 얻음) 평소와 같이 암호화합니다(따라서 'bhello world'를 암호화함).이번에는 'qwertyuio'를 얻습니다.

요점은 공격자가 IV가 무엇인지 모르기 때문에 일치하는 암호 텍스트를 찾기 위해 주어진 일반 텍스트에 대해 가능한 모든 IV를 계산해야 한다는 것입니다.이러한 방식으로 IV는 다음과 같은 역할을 합니다. 비밀번호 소금.가장 일반적으로 IV는 연결 암호(스트림 또는 블록 암호)와 함께 사용됩니다.체인 블록 암호에서는 일반 텍스트의 각 블록 결과가 암호 알고리즘에 입력되어 다음 블록의 암호 텍스트를 찾습니다.이러한 방식으로 각 블록은 서로 연결됩니다.

그렇다면 일반 텍스트를 암호화하는 데 사용되는 임의의 IV가 있는 경우 이를 어떻게 해독합니까?단순한.암호화된 텍스트와 함께 IV(일반 텍스트)를 전달합니다.위의 첫 번째 예를 사용하면 최종 암호 텍스트는 'xasdfghjkl'(IV + 암호 텍스트)이 됩니다.

예, IV를 사용해야 하지만 올바르게 선택했는지 확인하십시오.좋은 난수 소스를 사용하여 만드세요.동일한 IV를 두 번 사용하지 마십시오.그리고 절대 상수 IV를 사용합니다.

에 대한 Wikipedia 기사 초기화 벡터 일반적인 개요를 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top