양방향 (대칭) 고유 토큰을 암호화해야합니다. 이 토큰은 반복 될 것으로 예상됩니다 (예 : 사람들의 이름). 그러나 공격자가 암호화 된 토큰이 동일한 원래 토큰에서 나온 것으로 결론 내릴 수는 없습니다. 소금은 단방향 암호화 (해싱)를 수행하는 방법입니다.대칭 암호화 및 소금
대칭 암호화, 임시 해결책 또는 대안으로 사용할 수있는 방법이 있습니까?
양방향 (대칭) 고유 토큰을 암호화해야합니다. 이 토큰은 반복 될 것으로 예상됩니다 (예 : 사람들의 이름). 그러나 공격자가 암호화 된 토큰이 동일한 원래 토큰에서 나온 것으로 결론 내릴 수는 없습니다. 소금은 단방향 암호화 (해싱)를 수행하는 방법입니다.대칭 암호화 및 소금
대칭 암호화, 임시 해결책 또는 대안으로 사용할 수있는 방법이 있습니까?
예. 올바르게 사용되는 대칭 암호화는 일반 텍스트에 대해서는 아무 것도 나타내지 않으며 여러 일반 텍스트가 동일하다는 사실조차 사실이 아닙니다.
올바른 사용은 초기화 벡터 (IV) 또는 논스 (즉, ECB가 아닌)를 사용하고 적절하게 IV (일반적으로 임의 바이트)를 선택하는 작동 모드를 선택하는 것을 의미합니다. 동일한 키와 IV로 여러 개의 일반 텍스트를 암호화하면 ECB 모드와 거의 비슷하게 공격을받을 수 있으며 정적 IV를 사용하는 것이 일반적인 실수입니다.
암호화할 항목이 토큰 (즉, 더 큰 데이터 구조에 포함되지 않음)이라고 가정하면 Inaticization Vectors (IV)를 사용하는 것이 좋습니다.
상당히 이해하기 쉽습니다. 대칭 암호화 알고리즘에 사용 된 블록 크기에 맞추기 위해 M을 토큰으로 사용하고 (I는 AES라고 가정합니다) IV를 임의의 비트 배열로 암호화 블록.
그런 다음 C = AES_ENCRYPT (M xor IV, K)를 계산합니다. 여기서 C는 암호화 된 데이터이고 K는 대칭 키입니다. 그렇게하면 매번 IV가 무작위로 얻어지기 때문에 동일한 메시지 M이 같은 방법으로 여러 번 암호화되지 않습니다.
M을 해독하려면 M = (AES_DECRYPT (C, K) xor IV)을 계산하면됩니다.
물론 IV와 K는 암호 해독 시간에 알려야합니다. IV를 전송하는 가장 일반적인 방법은 암호화 된 텍스트를 따라 전송하는 것입니다. 이것은 보안을 손상시키지 않습니다. 소금 값을 저장하는 것과 비슷합니다. 왜냐하면 암호화 키는 다른 모든 사람들에게 알려지지 않기 때문입니다.
암호화 될 데이터가 블록 크기보다 작거나 같다고 가정합니다. 그렇지 않을 수도 있습니다. 또한 데이터를 안전하게 보호 할 수있는 방식으로 채우는 방법에 대한 도움이 없습니다. 해독시 삭제됨. 일반적인 방법은 IV가 PKCS # 7 패딩 옵션과 함께 CBC 모드를 사용하는 것입니다. 여기서 IV는 각 암호화에 대해 다른 임의의 값이고 암호화 된 데이터의 접두사입니다. – zaph
맞습니다. 잘못된 가정 일 수도 있습니다. 이 경우 CBC를 사용하는 것이 좋습니다. 명확히하기 위해, CBC 모드는 나의 답변에 설명 된 것과 동일한 작업을 수행하지만, Inicialization 벡터 대신에 xor 연산을 위해 이전의 암호화 된 블록을 사용합니다. – agubelu
사용자 이름을 특정 크기로 채워야 할 수도 있지만 이름 크기에 대한 정보가 누출되는 경우는 예외입니다. –
@ntoskmi 매우 조밀 한 대답. 당신은 ECB가 무엇인지에 대해 더 자세히 설명 할 수있는 자원과 암호 해독시에 IV가 어떻게 알려질지를 지적 할 수 있습니까? – yannisf
@yannisf 위키 백과에는 [조작 모드] (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation)에 대한 기사가 있습니다. 특히 펭귄을 묘사하는 일련의 이미지를 주목하십시오. IV를 암호문과 함께 보내면됩니다. 비밀로 할 필요가 없습니다. – ntoskrnl