0

비밀 번호로 레코드 파일의 기밀성, 무결성 및 신뢰성을 보호해야합니다. 레코드 수는 잠재적으로 32^2 이상이 될 수 있으며 각 레코드는 독립적으로 액세스 할 수 있습니다. 그것을 구현하는메시지 인증 코드 (MAC)는 사용 된 키의 신뢰성을 보장합니까?

한 가지 방법은

  1. 는 256 비트 무작위로 소금을 생성하고 파일 헤더에 저장됩니다.
  2. PKCS # 5의 HMAC-SHA256과 함께 PBKDF2를 사용하여 암호와 소금에서 파생 된 키를 생성합니다.
  3. 각 레코드에 대해 96 비트 임의 초기화 벡터를 생성하십시오.
  4. 파생 키, 초기화 벡터 및 (추가 인증 된 데이터로) 파일의 레코드 위치를 사용하여 GCM 모드에서 AES-256을 사용하여 각 레코드의 내용을 암호화합니다.
  5. 결과적으로 각 레코드에는 초기화 벡터, 암호화 된 내용 및 MAC이 저장됩니다.

그러나 NIST Special Publication SP800-38D defining GCM and GMAC은 초기화 벡터가 고유하기 때문에 레코드 수가 32^2보다 작아야합니다.

그래서 나는 해독 된 키를 키로 사용하고 파일의 레코드 위치를 인증 할 메시지 (소금)로 사용하여 HMAC-SHA256으로 각 레코드의 키를 만듭니다.

그래서 열쇠를 생성 할 때 이미 인증 된 데이터이므로 추가 인증 데이터로 인증 된 암호화 알고리즘 에 파일의 레코드 위치를 제공해야합니까?

또한 모든 레코드가 암호화되고 은 HMAC-SHA256 (PBKDF2 (HMAC-SHA256, 암호, salt, iterationCount, 256)에 의해 생성 된 다른 키를 사용하여 인증 됨) blockAddress)?

파일의 크기를 알 수 없으므로 크기가 매우 커질 수 있습니다.

답변

0

나는 당신을 올바르게 이해했다면 (면책 조항 비트, 죄송합니다) 파일의 레코드 내에 위치를 추가하지 않으면 괜찮을 것입니다.

아니요 (세션) 키를 한 번만 사용하는 경우 임의 IV를 필요로하지 않습니다. 0으로 구성된 IV를 사용하면 충분합니다 (NIST 명명법을 계속 사용하는 경우 하나의 장치와 카운터를 0으로 설정하여 결정 성있는 구성).

+0

평상시와 같이 몇 가지 보안 권고 사항 : 잘못된 암호, 변조 된 암호 텍스트 및 재정렬 된 레코드를 구별 할 수 있는지 확인하십시오. 또는 어떤 경우에도 문제가 발생하면 약간의 문제가 발생할 수 있습니다. 또한 모든 프리미티브에 동일한 보안 레벨을 사용하는 것이 좋습니다. AES 256 (보안도 ~ 256 비트)과 함께 SHA-512 (보안 ~ 256 비트)를 사용하십시오. –

+0

1. 잘못된 암호와 손상된 파일 (변경된 암호 텍스트, 재정렬 된 레코드, 변경된 소금) 만 구별하는 것이 좋습니다.하지만 상대방이 소금을 바꿀 경우 암호를 틀린 암호와 구별 할 수 없습니다. –

+0

2. AES-256에서 SHA-512로 생성 된 키를 사용하는 방법을 이해하지 못합니다. 왜냐하면 후자는 256 비트 키가 필요하기 때문입니다. 하나의 옵션은 잘라내 기는하지만 키를 효과적으로 약화시킵니다. 그리고 NIST-SP-800-107은 잘라내 기가 괜찮다고 말하지만, "SHA 자르기"에 대한 검색 결과는 혼합 된 결과를 제공합니다. 다른 옵션은 비슷하지만 다른 256 비트를 IV로 사용합니다. –