API 호출을 위해 HMAC 서명을 생성하기 위해 AES를 사용합니다. 그리고 난스가 무엇인지, 중요성이 무엇인지 이해하지만, 나는 그들이 정확히 어디에 있는지 혼동합니다. 구현 될 것입니다.AES : nonce를 사용하여 HMAC에 대한 새 키 생성
난센스를 사용하여 클라이언트의 비밀 키를 변경하여 재생 공격으로 쉽게 악용 될 수있는 호출에 서명하는 새로운 단일 사용 키를 생성 할 생각이 들었습니다.
기본 전제는 사용자가 로그인 할 때 비밀 키를 얻고, transactionID와 새로운 nonce를 생성하고 반환하는 설정 API 프로 시저를 호출하는 것입니다. 그런 다음 사용자는 자신의 비밀 키와 nonce를 결합하여 TransactionID 및 기타 몇 가지 사인을 서명합니다. 그런 다음 서버는 해당 사용자에 대해 현재 활성 nonce를 사용하여이 서명을 일치 시키려고 시도합니다.
서버는 자동으로 이전 접속 번호를 지우고 새 설정 호출이 이루어지면 사용자가이 연결 순서를 따라야합니다 (이전 접속 번호는 삭제되고 서버 이 서명을 더 이상 수락하지 않습니다.
이것이 논스 (nonce)를 사용하는 올바른 방법 인 경우 클라이언트의 키와 결합하여 유효한 비밀 키를 얻는 방법은 무엇입니까? 그래서 내 키가 긴 항상 32 바이트입니다
private static AesCryptoServiceProvider GetProvider(byte[] key, byte[] IV)
{
AesCryptoServiceProvider result = new AesCryptoServiceProvider();
result.BlockSize = 128;
result.KeySize = 256;
result.Mode = CipherMode.CBC;
result.Padding = PaddingMode.PKCS7;
result.IV = IV;
result.Key = key;
return result;
}
내가 AES-256을 사용
나는 AES 제공이 방법을 생성합니다. 그러나 nonce를 사용하여 새 키를 만들려는 경우 결과 문자열이 더 이상 32 바이트가 아니기 때문에 간단히 연결할 수는 없습니다.
결과를 32 바이트 길이로 다시 가져 오기 위해 고정 길이 해시 함수를 연결해야합니까? 아니면 내가 누락 된 nonce를 자동으로 처리하는 AESCryptoServiceProvider 생성자/메서드가 있습니까? 아니면 nonce를 일반 텍스트에 서명에 추가하고 서버가 별도로 읽고이를 직접 확인하도록해야합니까?
주어진 답변으로 문제가 해결되면 [수락] (https://meta.stackexchange.com/q/5234/266187) 할 수 있습니다. 그렇지 않다면, 무엇이 잘못되었는지 확장하십시오. –