메시지 인증은 신원 인증에 있어서 중요한 역할을 하며, 금융 및 상업 시스템에서 널리 사용되는 인증 시스템의 중요한 부분입니다.
메시지 인증 코드(Message Authentication Code, 즉 MAC)는 일반적으로 인증의 기초로 사용됩니다.
기본 원칙은 키(개인 키)를 사용하여 작은 데이터 블록을 생성하고 이를 전송할 메시지에 추가하는 것입니다. 이 기술은 두 통신 당사자가 키 K를 공유한다고 가정합니다. 한 통신 당사자가 상대방에게 데이터 M을 전송하려고 할 때 메시지 M의 MAC는 특정 알고리즘 = F(K, M)을 통해 계산됩니다. 여기서 F는 인증 동작 기능으로 이동한 후 메시지 데이터 M과 MAC를 상대방에게 함께 전송합니다. 상대방은 데이터를 수신하면 먼저 동일한 알고리즘 F를 사용하여 MAC을 계산하고 이를 전송된 MAC과 비교하여 데이터가 올바른 것으로 간주합니다. 인증 기능은 흔히 암호화 알고리즘의 일종으로 간주되지만, 역연산에는 사용되지 않으며 어느 정도의 보안성을 갖고 있다는 점에서 차이점이 있다. 일반적으로 다양한 애플리케이션 시스템은 자체 특정 인증 기능을 사용하여 어느 정도 데이터 보안을 보장합니다.
j2sdk1.4부터 Java는 javax.crypto.Mac 클래스 메시지 인증을 제공합니다.
일반 사본을 클립보드 인쇄로 보시겠습니까?
byte[] macData = "this is a mac test".getBytes(); //HmacMD5 알고리즘을 사용하여 Mac 인스턴스 가져오기
Mac mac = Mac.getInstance("HmacMD5"); //알고리즘의 IV를 초기화합니다. 파일에서 8바이트를 읽을 수 있습니다.
바이트[] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // Mac 검증의 비밀 키 바이트, 파일에서도 읽을 수 있음
byte[] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; //비밀 바이트를 사용하여 비밀 키 개체를 생성하고 DESede 알고리즘
SecretKey key = new SecretKeySpec(keyBytes, "DESede"); // Mac 초기화 mac.init(key, spec);
byte[] macCode = mac.doFinal(macData);
byte[] macData = "this is a mac test".getBytes(); //HmacMD5 알고리즘을 사용하여 Mac 인스턴스 가져오기
Mac mac = Mac.getInstance("HmacMD5"); //알고리즘의 IV를 초기화합니다. 파일에서 8바이트를 읽을 수 있습니다.
바이트[] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // Mac 검증의 비밀 키 바이트, 파일에서도 읽을 수 있음
byte[] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; //비밀 바이트를 사용하여 비밀 키 개체를 생성하고 DESede 알고리즘
SecretKey key = new SecretKeySpec(keyBytes, "DESede"); // Mac 초기화 mac.init(key, spec);
byte[] macCode = mac.doFinal(macData);
macCode는 생성된 Mac이며, 동일한 키를 사용하여 동일한 Mac을 생성할 수 있습니다.
통신 당사자가 동일한 키를 사용하도록 보장하는 한, 메시지 확인 목적을 달성하기 위해 동일한 Mac을 사용할 수 있습니다.
이는 인터넷에서 흔히 사용하는 체크섬과 같은 원리인 것으로 보인다.
-