AES 암호화-키 대 IV
내가 작업중인 응용 프로그램을 사용하면 사용자가 파일을 암호화 할 수 있습니다. 파일은 모든 형식 (스프레드 시트, 문서, 프레젠테이션 등)이 될 수 있습니다.
지정된 입력 파일에 대해 암호화 된 데이터 파일과 키 파일이라는 두 개의 출력 파일을 만듭니다. 원본 데이터를 얻으려면이 두 파일이 모두 필요합니다. 키 파일은 해당 데이터 파일에서만 작동해야합니다. 동일한 사용자 또는 다른 사용자의 다른 파일에서는 작동하지 않아야합니다.
AES 알고리즘에는 암호화를 위해 키와 초기화 벡터 (IV)라는 두 가지 매개 변수가 필요합니다.
키 파일을 만들기위한 세 가지 선택 사항이 있습니다.
- 애플리케이션 내에 하드 코딩 된 IV를 포함하고 키 파일에 키를 저장합니다.
- 응용 프로그램에 하드 코딩 된 키를 포함하고 IV를 키 파일에 저장합니다.
- 키 파일에 키와 IV를 모두 저장합니다.
다른 고객이 사용하는 동일한 응용 프로그램입니다.
세 가지 선택 모두 동일한 최종 목표를 달성 할 것으로 보입니다. 그러나 올바른 접근 방식이 무엇인지에 대한 피드백을 받고 싶습니다.
다른 답변에서 볼 수 있듯이 암호화 된 파일마다 고유 한 IV를 갖는 것이 중요하지만 그 이유는 무엇입니까?
먼저 암호화 된 파일마다 고유 한 IV가 중요한 이유를 살펴 보겠습니다. ( IV의 Wikipedia ). IV는 암호화 프로세스 시작에 임의성을 추가합니다. 체인 블록 암호화 모드 (암호화 된 데이터의 한 블록이 암호화 된 데이터의 이전 블록을 통합하는 경우)를 사용할 때 IV가 들어오는 첫 번째 블록과 관련된 문제가 남습니다.
IV가없고 키만으로 체인 블록 암호화를 사용한 경우 동일한 텍스트로 시작하는 두 개의 파일이 동일한 첫 번째 블록을 생성합니다. 입력 파일이 중간에 변경되면 두 개의 암호화 된 파일이 해당 지점에서 시작하여 암호화 된 파일의 끝까지 다르게 보이기 시작합니다. 누군가가 처음에 유사점을 발견하고 파일 중 하나가 시작된 것을 알고 있다면 다른 파일이 시작된 것을 추론 할 수 있습니다. 일반 텍스트 파일이 시작된 내용과 해당 암호문이 무엇인지 알면 해당 사용자가 키를 확인한 다음 전체 파일을 해독 할 수 있습니다.
이제 IV를 추가합니다. 각 파일이 임의의 IV를 사용하면 첫 번째 블록이 달라집니다. 위의 시나리오는 좌절되었습니다.
이제 IV가 각 파일에 대해 동일하다면 어떻게 될까요? 음, 우리는 다시 문제 시나리오가 있습니다. 각 파일의 첫 번째 블록은 동일한 결과로 암호화됩니다. 실제로 이것은 IV를 전혀 사용하지 않는 것과 다르지 않습니다.
이제 제안 된 옵션을 살펴 보겠습니다.
옵션 1. 하드 코딩 된 IV를 응용 프로그램에 포함하고 키 파일에 키를 저장합니다.
옵션 2. 애플리케이션 내에 하드 코딩 된 키를 포함하고 IV를 키 파일에 저장합니다.
이 옵션은 거의 동일합니다. 동일한 텍스트로 시작하는 두 개의 파일이 동일한 암호문으로 시작하는 암호화 된 파일을 생성하는 경우, 당신은 망할 것입니다. 이 두 옵션 모두에서 발생합니다. (모든 파일을 암호화하는 데 사용되는 하나의 마스터 키가 있다고 가정).
옵션 3. 키 파일에 키와 IV를 모두 저장합니다.
각 키 파일에 대해 임의의 IV를 사용하면 좋습니다. 두 개의 키 파일이 동일하지 않으며 각 암호화 된 파일에는 키 파일이 있어야합니다. 다른 키 파일은 작동하지 않습니다.
추신 : 일단 옵션 3과 무작위 IV를 사용하면 암호 해독이 성공했는지 확인하는 방법을 알아보십시오. 한 파일에서 키 파일을 가져 와서 다른 암호화 파일을 해독하는 데 사용해보십시오. 암호 해독이 진행되고 가비지 결과가 생성됨을 발견 할 수 있습니다. 이 경우 인증 된 암호화 조사를 시작하십시오 .
IV에 대한 중요한 점은 두 개의 메시지에 대해 동일한 IV를 사용해서는 안된다는 것 입니다. 그 밖의 모든 것은 부차적 인 것입니다. 독 특성을 보장 할 수 있다면 무작위성은 덜 중요합니다 (하지만 여전히 가지고있는 것은 매우 좋습니다!). IV는 비밀 일 필요가 없습니다 (실제로 CBC 모드에서는 비밀 일 수 없습니다 ).
따라서 키와 함께 IV를 저장해서는 안됩니다. 이는 모든 메시지에 대해 동일한 IV를 사용한다는 것을 의미하므로 IV를 갖는 요점을 무효화합니다. 일반적으로 암호화 된 파일 앞에 IV를 투명 하게 추가합니다 .
이와 같이 자신의 암호 모드를 롤링하려는 경우 관련 표준을 읽으십시오. NIST는 여기에 암호 모드에 대한 좋은 문서가 있습니다. http://dx.doi.org/10.6028/NIST.SP.800-38A IV 생성은 부록 C에 문서화되어 있습니다. 암호화는 미묘한 기술 입니다. 일반 암호 모드를 변형하여 만들려고하지 마십시오. 99 %의 경우 더 안전 해 보이지만 실제로는 덜 안전한 무언가를 만들 것입니다 .
IV를 사용할 때 가장 중요한 것은 IV가 가능한 한 고유해야하므로 실제로는 임의의 IV를 사용해야합니다. 즉, 응용 프로그램에 포함하는 것은 옵션이 아닙니다. IV가 random / unique 인 한 보안에 해를 끼치 지 않기 때문에 IV를 데이터 파일 에 저장합니다 .
참고 URL : https://stackoverflow.com/questions/9049789/aes-encryption-key-versus-iv
'development' 카테고리의 다른 글
HTML 이메일을 보내는 방법 (0) | 2020.12.04 |
---|---|
Clojure에서 맵 키와 값을 반복하는 방법은 무엇입니까? (0) | 2020.12.04 |
파이썬에서 dir과 __dict__의 가장 큰 차이점은 무엇입니까 (0) | 2020.12.04 |
IIS는 시작된 URL과 일치하는 웹 사이트를 나열하지 않습니다. (0) | 2020.12.04 |
자바 스크립트에서 타입 스크립트 선언 파일 생성 (0) | 2020.12.04 |