hmac와 대칭 암호는 상호 배타적 인 아이디어가 아닙니다. 사실 AES-CMAC은 MAC (해시가 아닌)과 대칭 암호이며, AES-CMAC은 WPA 보안을 유지하는 암호화 기본 요소입니다. (WPA는 여전히 rainbow table을 사용하여 깨질 수 있지만).
이 경우 이국적인 인증 시스템이 필요하지 않습니다. 사용자 이름과 암호로 로그인하고 쿠키로 세션 상태를 유지하는 것은 구현하기 쉽고 안전하기 때문에 일반적으로 사용됩니다. Cookie와 같은 상태를 저장하면 더 이상 기술적으로 RESTful이 아니지만 그 일을 막을 수있는 방법은 없습니다.
그러나 인증면에서 나는 RSA와 같은 비대칭 암호화가 가장 안전하다고 믿습니다. (Amazon은 기본적으로 ssh 연결에 비대칭 암호화를 사용합니다.) 이렇게하면 공개 키만 저장할 수 있기 때문에 손상 될 서버에 인증 자격 증명을 사용할 수 없도록 할 수 있습니다. 또한 MITM 공격을 방어합니다. 많은 경우 HTTPS가 이미 클라이언트 인증서를 지원하기 때문에 REST로 이식 할 수 있습니다. 무료로 클라이언트 인증서에 서명 한 다음 verify them 자신을 서명 할 수 있습니다.
제대로 구현되면, hmac 대 대칭 암호의 강점은 대개 비밀의 강점에 달려 있습니다. 비밀 번호 같은 비밀 번호를 사용하는 경우, 두 시스템은 똑같이 매우 약합니다. 이러한 비밀은 커야합니다 (Cryptographically Secure Psudorandom Numbers). 염두에 두어야 할 또 다른 점은 대칭 암호가 제대로 구현하기 어렵다는 것입니다. 대부분의 프로그래머는 이것을 이해하지 못해서 스트림 암호를 사용할 때 PRNG를 재사용하거나 블록 암호를 사용할 때 잘못된 모드를 사용하고 IV를 남겨 둡니다. 반대로 HMACS는 매우 쉽게 구현하고 덜 갈 수 있습니다. 모든 것이 HTTPS를 통해 전송되고 hmac을 사용하고 있다면 보안 인증 시스템을 쉽게 구현할 수 있습니다. 대칭 암호를 구현하고 싶다면 Piratical Cryptography 사본을 얻어야합니다. 대칭 암호만으로 구성된 장이 너무 많아서 끔찍하게 잘못 될 수 있습니다. ssl은 키 분배를 고려해야하며, 대칭 키는 DH 키 교환을 사용합니다.
OWASP 상위 10 개, 특히 Broken Authentication and Session Management을 읽으십시오. 이것은 전체 세션에 대해 https를 사용해야하며 대부분의 웹 응용 프로그램 프로그래머는이를 인식하지 못합니다.
AES-CMAC은 어떤가? – rook