EDIT :이 문제는 다음과 같이 간단하게 표현할 수 있습니다. : 다음 Node.js 코드는 "잘못된 IV 길이"오류를 표시합니다. 왜? IV는 무엇이되어야합니까?AES-GCM 모드의 nonce/iv 크기가 올 바르십시오.
const crypto = require('crypto')
const decipher = crypto.createDecipheriv('aes-128-gcm', crypto.randomBytes(16), crypto.randomBytes(16))
나는 일부 데이터를 암호화 GCM 모드에서 AES를 사용하고 있습니다,하지만 난 암호화 및 암호 해독에 두 개의 서로 다른 언어와 라이브러리를 사용하고 있는데 그들은 내가해야 할 일에 대해 서로 다른 어휘를 갖고있는 것 같다.
저는 파이썬 라이브러리 (Crypto)로 암호화하고 있습니다. encrypt_and_digest
메서드는 128 비트 키와 메시지를 가져와 128 비트 nonce, 128 비트 태그 및 암호문을 반환합니다.
(this example에서 가져온 암호화 코드)
나는 기본 Node.js를 crypto 라이브러리를 해독하고 있습니다. 이 라이브러리는 세션 키, 태그 및 IV를 예상합니다. IV로 파이썬 라이브러리에서 nonce를 전달하면 "유효하지 않은 iv 크기"오류가 발생합니다. 노드 라이브러리의 Examples은 12 자 문자열을 IV로 사용하는 것 같습니다.
내 암호 해독 코드 (here에서 촬영) 다음과 같습니다
var decipher = crypto.createDecipheriv(algorithm, password, nonce)
decipher.setAuthTag(encrypted.tag);
var dec = decipher.update(encrypted.content, 'hex', 'utf8')
이 제도에 대한 IV 및 비표의 차이점은 무엇입니까? 이 문제를 어떻게 해결해야합니까? 감사!
일부 배경 : NIST의 GCM (38D 문서, 내가 잘못하지 않은 경우)의 권장 기본값은 12 바이트 (또는 96 비트)입니다. 다른 크기는 추가 작업이 필요하며 약간 덜 안전 할 수 있습니다. 그래서 NIST는 항상 96 비트를 사용하여 * 다른 구현과 호환되도록 제안합니다 *. –