현재 다른 곳에 보내야하는 일부 데이터를 암호화하기 위해 CBC 모드에서 Rijndael 256 비트를 사용 중입니다. 보안을 강화하기 위해 무작위로 생성 된 SHA-256 해시를 사용하고 암호화 키와 초기화 벡터를 사용하여 다른 부분을 잘라내어 수식을 사용하여 해시가 데이터와 함께 전송됩니다. 키와 IV를 생성하는 수식은 상당히 기본이며 코드는 PHP로 작성 되었기 때문에 사용자가 액세스 할 수있는 페이지로 코드화되어 있습니다. 내가 궁금해하는 것은 하나의 상수 및/또는 IV를 갖는 것보다 다소 안전할까요?암호화를 위해 해시에서 키를 생성해야합니까?
답변
아마도 이것은 원하는 방식이 아닙니다. 본질적으로 해시를 조작하여 키와 IV를 생성하기위한 수학 공식을 오랫동안 파악하지 않는 것이 좋습니다. 그러므로 당신은 본질적으로 왕국과 함께 왕국에 열쇠를 보내고 있습니다.
일반적으로 이러한 유형의 작업이 수행되는 방식은 세션 키를 생성하는 것입니다 (지금하는 것과 같은 방법 일 수 있음). 그러나 공개 키 암호화 방법을 사용하여 해당 세션 키를 암호화하십시오. 그런 다음 공개 키 암호화 방법을 사용하여 데이터를 보낼 위치로 세션 키를 보냅니다. 수신자는 공개 키를 가지고 있으며 통신을 암호화 할 수 있습니다. 채널 세션 키.
이제 양쪽에는 통신이 있습니다. 세션 키가 클리어되지 않은 상태에서이 키를 사용하여 REAL 데이터를 암호화 할 수 있습니다.
Rijindael은 공개 키 암호화 알고리즘이 비대칭 인 대칭 암호화 알고리즘의 예입니다. 공개 키 암호화 알고리즘의 예로는 RSA, ECDSA (Crypto) 등이 있습니다.
정보 주셔서 감사합니다. 세션 키를 가져 오는 데 어려움이 있기 때문에 전체 프로세스에 대해 단일 암호화 키를 사용하기로 결정했습니다. 내가 더 안전하게 만들 수있는 방법은 무엇입니까? – Palladium
당신은 하나의 키를 가지고 있다면, 실제로 어떤 시점에서 충분한 데이터가 암호문 공격을 시도하기 위해 링크를 통과 할 것입니다. – trumpetlicks
한 가지 더. 공개 키가 데이터 자체를 암호화하는 것과는 대조적으로 세션 ID를 비대칭 암호화하여 대칭 암호화 키로 사용하여 내 데이터를 해독하는 이점이 있습니까? – Palladium
단기 사용 키 생성시. 장기적인 열쇠를 가져라. 리시버로 날짜 형식을 동의하십시오.
dayKey <- SHA256("my very secret long term key" + "2012-06-27")
이 수신기는 그들이 정확히를 생성하는 데 필요한 모든 정보를 갖게됩니다 매일 해당 날짜에 사용하기 위해 하루에 키를 생성하는 일의 날짜와 장기 키를 연결할 및 SHA-256로 해시 그들의 끝에 동일한 열쇠. 공격자는 날짜를 알 수 있지만 장기 키는 알 수 없습니다.
자정 12 시경 및 몇 가지 다른 세부 정보에 동의해야합니다.
전달하는 암호화 된 데이터의 양에 따라 매월 또는 2 개월마다 장기 키를 변경하십시오. 전달하는 데이터가 많을수록 더 자주 장기 키를 변경해야합니다.
키가 데이터와 함께 전송되는 경우 암호화가 아니라 단지 난독 화입니다. –
암호화의 기본 규칙은 동일한 키 + IV 조합을 결코 다시 사용하지 않는 것입니다. 즉, 모든 메시지에는 다른 IV가 있어야합니다. –
그 밖의 기본 규칙이 없다면 아주 좋은 암호 작성자가 만든 세션 키를 생각할 필요가 없습니다. 그러나 실제로 달성 할 수 있다면 그것은 "좋은"규칙입니다! – trumpetlicks