문제

사용자로부터 암호를 가져온 다음 암호화 된 데이터를 파일에 작성하는 프로그램을 작성하고 있습니다. 지금까지 내가 생각해 낸 방법은 다음과 같습니다.

  • 파일 이름과 시스템 시간을 해싱하여 128 비트 IV를 생성하고 파일의 시작 부분에 이것을 작성하십시오.
  • SHA256을 사용하여 암호에서 256 비트 키를 생성하십시오.
  • CBC 모드에서 AES를 사용 하여이 키를 사용하여 데이터 (32 비트 정적 서명으로 시작)를 암호화하고 파일에 적어 둡니다.

해독 할 때 IV를 읽은 다음 동일한 방식으로 키를 생성하는 데 사용되는 암호를 사용하고 첫 32 비트는 키가 유효한지 알리기 위해 서명이 무엇인지와 비교됩니다.

그러나 나는보고 있었다 AES 예 제공됩니다 폴라 스플 (해싱 및 암호화를 수행하기 위해 사용하는 라이브러리)는 훨씬 더 복잡한 방법을 사용합니다.

  • 파일 이름과 파일 크기를 해싱하여 128 비트 IV를 생성하고 파일의 시작 부분에 작성하십시오.
  • Hashing (SHA256)에서 256 비트 키를 생성하고 IV는 8192 회 함께합니다.
  • 이 키로 HMAC를 초기화하십시오.
  • CBC 모드에서 AES를 사용 하여이 키로 데이터를 암호화하고 각 암호화 된 블록으로 HMAC를 업데이트하면서 파일에 작성하십시오.
  • 파일 끝에 HMAC를 씁니다.

두 번째 방법이 더 안전하다는 인상을 받았지만, 더 복잡해 보이는 것 외에는이를 뒷받침 할 수있는 지식이 충분하지 않습니다.

  • 더 안전하다면 그 이유는 무엇입니까?
  • 암호화 된 데이터의 시작 부분에 서명이있는 것보다 파일 끝에 HMAC를 추가하는 것이 더 안전합니까?
  • 8192 배 해싱 보안이 증가합니까?

메모: 이것은 오픈 소스 프로젝트이므로 내가 사용하는 모든 방법은 누구나 자유롭게 사용할 수 있습니다.

도움이 되었습니까?

해결책

두 번째 옵션은 더 안전합니다.

방법은 메시지 무결성을 제공하지 않습니다. 이는 공격자가 암호 텍스트의 일부를 수정하고 일반 텍스트가 해독하는 것을 변경할 수 있음을 의미합니다. 32 비트 정적 서명을 변경하는 것을 수정하지 않으면 신뢰할 수 있습니다. 두 번째 방법의 HMAC는 메시지 무결성을 제공합니다.

키를 8192 번 해시함으로써 누군가가 키를 시도하고 무차별하려는 계산 단계를 추가합니다. 사용자가 사전 기반 비밀번호를 선택한다고 가정합니다. 방법으로 공격자가 수행해야합니다 SHA256(someguess) 그런 다음 시도하고 해독하십시오. 그러나 PolarsSL 버전을 사용하면 계산해야합니다. SHA256(SHA256(SHA256...(SHA256(someguess))) 8192 번. 이것은 공격자가 속도를 늦출 것이지만 충분할 수 있습니다 (지금은).

가치가있는 것은 기존 라이브러리를 사용하십시오. 암호화는 어렵고 미묘한 실수가 발생하기 쉽습니다.

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