추가 인증 데이터(AAD)는 암호화 또는 복호화 요청의 일부로 Cloud Key Management Service에 전달하는 문자열입니다. AAD는 무결성 확인으로 사용되며 혼동된 대리인 공격으로부터 데이터를 보호할 수 있습니다. AAD 문자열은 64KiB 이하여야 합니다.
Cloud KMS는 암호화와 복호화에 동일한 AAD 값이 사용되어야 암호 텍스트를 복호화합니다.
AAD를 모르는 경우 암호 텍스트를 복호화할 수 없으므로 AAD는 암호화된 데이터에 바인딩되지만 AAD는 암호 텍스트의 일부로 저장되지 않습니다. 또한 AAD는 암호 텍스트의 암호화 강도를 더 높이지도 않습니다. AAD는 복호화 요청을 인증하기 위해 Cloud KMS에서 수행하는 부가적인 확인입니다.
Cloud KMS에서 암호화 또는 복호화를 요청하는 경우 항상 AAD가 제시됩니다. AAD의 값을 입력하지 않을 경우 빈 문자열이 사용됩니다. 일반 텍스트 암호화를 위한 AAD로 빈 문자열이 사용되는 경우 빈 문자열만 암호문의 복호화를 허용합니다.
AAD는 Cloud 감사 로그에 로깅되지 않습니다.
AAD를 사용해야 하는 경우
AAD 사용의 한 가지 예는 단일 키와 무제한 수의 클라이언트가 있고 각 클라이언트가 명확한 보안 경계에 있는 상태에서 애플리케이션이 래핑/래핑 해제 프록시 역할을 하는 경우입니다. 사용자가 비공개 일기를 유지할 수 있도록 하는 일기 애플리케이션을 예로 들 수 있습니다. 사용자가 비공개 일기 항목을 봐야 하는 경우 애플리케이션은 래핑 해제(복호화) 요청에서 고유한 사용자 이름을 AAD로 사용하여 명시적으로 사용자를 인증할 수 있습니다. 이 시나리오에서 단일 키를 사용하여 여러(무제한) 사용자에게 서비스를 제공할 수 있습니다. 주된 이점은 개별 사용자의 상태를 유지할 필요가 없다는 것입니다.
또 다른 예는 애플리케이션이 이메일 주소와 같은 비공개 정보가 포함된 Bearer 토큰을 사용해야 하는 경우입니다. Bearer 토큰에 대한 입력은 Bearer 토큰용으로 사용되는 인증된 데이터와 일반 텍스트 이메일 주소일 수 있습니다. 이러한 입력은 교환되는 Bearer 토큰이 추가 암호화 인증 데이터(AEAD) 형식이 되도록 암호화될 수 있습니다.
혼동된 대리인 공격 예
이 예는 애플리케이션이 어떻게 속임수에 넘어가 악성 사용자 대신 암호 텍스트를 복호화할 수 있는지 보여줍니다. 이 예에서 애플리케이션은 공격자가 애플리케이션의 권한을 오용하도록 속였다는 사실을 인지하지 못하므로 혼동된 대리인입니다. 결과적으로 공격자는 원래 다른 사용자를 위해 암호화된 데이터를 복호화해서 볼 수 있습니다. 공격자는 혼동된 대리인을 통해 복호화를 수행하므로 암호화 키를 알 필요가 없습니다.
일기 애플리케이션은 사용자가 비공개 일기를 유지하도록 허용합니다. 각 일기 항목은 암호화되며, 해당 일기 항목을 만든 사용자만 일기 항목을 복호화할 수 있도록 되어 있습니다.
앨리스는 일기 항목을 만듭니다. 애플리케이션은 일기 항목을 암호화한 다음 암호화된 일기 항목을 앨리스 소유의 일기 항목용으로 예약된 위치에 저장합니다.
앨리스는 자신의 일기 항목을 보기 위한 요청을 전송합니다. 암호화 된 일기 항목은 앨리스용으로 예약된 위치에 있으므로 애플리케이션은 데이터를 복호화하여 앨리스의 요청에 대한 응답으로 반환합니다. 이는 애플리케이션의 의도된 동작입니다.
말로리는 앨리스용으로 예약된 위치에 있는 앨리스의 일기 항목을 말로리용으로 예약된 위치로 복사합니다.
말로리는 앨리스 일기 항목의 말로리 복사본을 보기 위한 요청을 전송합니다. 앨리스 일기 항목의 복사본은 말로리용으로 예약된 위치에 있으므로 애플리케이션은 일기 항목을 복호화해서 일반 텍스트를 말로리 요청의 응답으로 반환합니다. 그러면 말로리는 앨리스의 일기 항목을 볼 수 있으며, 이는 애플리케이션의 의도한 동작이 아닙니다.
이 유형의 공격을 방어하기 위해 애플리케이션은 암호화와 복호화에서 빈 문자열이 아닌 문자열을 AAD로 사용할 수 있습니다. AAD는 복호화 요청에 대한 부가적인 확인 기능을 제공합니다. 말로리가 앨리스 일기 항목의 말로리 복사본을 보기 위해 복호화 요청을 전송하더라도 올바른 AAD를 사용하도록 말로리가 애플리케이션을 속이지 않는 한 말로리의 요청은 성공하지 못합니다.
AAD 저장 또는 재생성
AAD를 사용하여 암호화하기 전에, AAD를 암호화된 데이터와 함께 저장할지 아니면 이후 복호화를 위해 AAD를 재생성할지를 결정하세요.
AAD를 저장하는 이유는 암호 텍스트를 복호화해야 할 때 AAD를 손쉽게 사용할 수 있기 때문입니다. 예를 들어 데이터베이스 행에 암호 텍스트와 일반 텍스트가 암호화될 때 사용된 AAD가 모두 포함될 수 있습니다. 애플리케이션은 복호화 요청이 수신되면 데이터베이스에서 AAD와 암호 텍스트를 모두 검색할 수 있습니다. 그런 다음 애플리케이션은 암호 텍스트 복호화 프로세스에 AAD를 사용할 수 있습니다.
AAD를 재생성하는 이유는 AAD 저장을 피하면서 비공개가 아닌 데이터를 확인하는 것입니다. 예를 들어 암호화된 파일의 파일 경로와 파일 이름이 변경되지 않았는지 확인하려는 경우 파일을 암호화할 때 파일 경로와 파일 이름을 AAD로 포함할 수 있습니다. 그런 다음 파일의 복호화 요청이 전송되면 파일 경로 및 파일 이름을 검사하여 AAD를 재생성할 수 있습니다.
AAD 저장
AAD 저장은 AAD가 저장된 다음 애플리케이션이 즉시 사용할 수 있음을 의미합니다. 예를 들어 데이터베이스 테이블에는 암호 텍스트 열과 암호 텍스트 생성 시 사용된 AAD 열이 포함될 수 있습니다. 암호 텍스트를 복호화해야 할 때가 되면 애플리케이션은 AAD를 검색하여 복호화에 사용합니다.
일기 항목을 만든 사용자에게만 그 일기 항목을 표시하도록 설계된 일기 애플리케이션을 고려해 보세요. 생성된 일기 항목은 암호화된 다음 ENCRYPTED_DIARY_ENTRY
열의 데이터베이스에 저장됩니다. 일기 항목을 보기 위한 각 요청에서 애플리케이션은 사용자를 인증한 다음 이 사용자에게 일기 항목을 제공합니다.
AAD가 사용되지 않고(기본 빈 문자열만 있음), 말로리가 앨리스의 ENCRYPTED_DIARY_ENTRY
데이터를 말로리의 ENCRYPTED_DIARY_ENTRY
데이터로 복사할 수 있었다고 가정해 보세요. 말로리가 말로리의 ENCRYPTED_DIARY_ENTRY
데이터(Alice의 데이터에서 복사된 데이터)에 대한 복호화 요청을 전송하면 애플리케이션은 속았다는 사실을 인지하지 못한 채 복호화를 수행합니다.
말로리는 앨리스의 일기 항목을 일반 텍스트로 볼 수 있습니다.
이제 일기 항목이 암호화될 때 사용자의 이메일 주소가 AAD로 사용된 경우를 가정해 보겠습니다. 앨리스가 일기 항목을 만들면 애플리케이션은 ENCRYPTED_DIARY_ENTRY
데이터와 함께 앨리스의 암호화되지 않은 이메일 주소를 EMAIL
열에 저장합니다. 이번에도 말로리가 앨리스의 ENCRYPTED_DIARY_ENTRY
데이터를 말로리의 ENCRYPTED_DIARY_ENTRY
데이터로 복사하는 데 성공했다고 가정해 보겠습니다.
말로리가 복호화 요청을 전송하면 애플리케이션은 복호화 요청의 AAD로 사용하기 위해 EMAIL
열에서 말로리의 이메일 주소를 검색합니다.
그러나 말로리의 이메일 주소는 복호화를 위한 AAD로 확인되지 않으므로 애플리케이션은 말로리가 앨리스의 일기 항목을 일반 텍스트로 보도록 허용하지 않습니다.
AAD 재생성
AAD 재생성은 AAD가 아무 데도 저장되지 않고 복호화 시점에 재생성됨을 의미합니다.
예를 들어 파일 경로와 파일 이름을 AAD로 사용할 수 있습니다. 암호화 프로세스 중에 암호화된 파일이 MY_PATH\MY_FILE1.enc
에 저장되고 따라서 "MY_PATH\MY_FILE1.enc"
가 AAD로 사용되었다고 가정해 보세요. 이 AAD는 저장되지 않습니다. 복호화 요청이 수신되면 애플리케이션은 복호화할 파일의 파일 경로와 파일 이름을 확인하여 AAD를 재생성합니다. 암호화된 파일이 다른 위치로 이동하지 않은 경우 "MY_PATH\MY_FILE1.enc"
는 복호화 시 AAD로 사용되며, 이는 암호화 중에 사용되는 AAD와 동일하기 때문에 복호화가 진행될 수 있습니다.
암호화된 파일이 SOME_OTHER_PATH\MY_FILE1.enc
등으로 이동한 경우에는 "SOME_OTHER_PATH\MY_FILE1.enc"
가 복호화를 위한 AAD로 사용됩니다. 이 AAD 값은 암호화에 사용된 AAD 값과 일치하지 않으므로 복호화에 실패합니다.