2014-04-21 1 views
9

내 서버 응용 프로그램을 대신하여 파일에 서명 할 수 있도록 여러 사용자에 대해 개인 키를 저장할 필요가 있습니다.데이터베이스에 개인 키 저장

개인 키를 안전하게 저장하려고하지만이 문제를 해결하기위한 모범 사례를 찾을 수 없습니다. 내가 패스워드를 저장하고 있었다면, 패스워드를 쉽게 해독 할 수없는 해시를 만들기 위해 패스워드를 해싱 + 해쉬 할 것입니다. 그러나 개인 키를 사용하면 이후에 검색 할 수있는 방식으로 저장해야합니다.

개인 키를 암호화 한 다음 데이터베이스에 저장한다고 생각했습니다. 나는 원래 각 키가 다른 암호로 암호화 될 것이라고 생각했습니다 (사용자의 일부 속성을 기반으로 함). 그러나 이러한 속성은 데이터베이스에 저장 될 가능성이 높습니다. 따라서 데이터베이스가 유출 된 경우 공격자는 모든 것을 처리합니다.

모든 개인 키를 내 응용 프로그램에만 알려진 단일 암호로 암호화 할 수 있습니다. 그런 다음 침입자는 데이터베이스를 훔쳐 내야하고 응용 프로그램을 악용해야합니다.

누락 된 기술/모범 사례가 있습니까?

답변

9

사용자 암호를 기반으로 대칭 키를 사용하여 개인 키를 암호화 할 수 있습니다. 단순히 추가 소금을 저장하고 "해시"암호를 수행하여 별도의 키를 얻으십시오. 그런 다음이를 개인 키 암호화의 키로 사용하십시오. 안전한 암호 해시를 생성하려면 암호 기반 PBKDF2, bcrypt 또는 scrypt와 같은 PBKDF (유도 함수)가 사용됩니다.

서명을 생성해야 할 때 온라인 상태가 아닌 사용자/사용자의 백 오피스 만 암호를 해독 할 수 있다는 의미에서 암호를 보호해야합니다. 일부 사용자 ID + 자신의 비밀 키를 사용하여 암호화/암호 해독 키를 계산할 수 있습니다. 하이브리드 암호화를 사용하여 암호화 해독을 수행하기 위해 별도의 RSA 키 쌍을 생성 할 수도 있습니다.

사용자를 대신하여 개인 키를 저장하는 것은 매우 위험합니다. 데이터를 손실하거나 개인 키가 노출 될 수있는 많은 방법이 있습니다 (예 : 측면 채널 공격). 전문적으로하기 위해서 당신은 실제로 그 과정에서 어딘가에 HSM을 사용해야합니다. 이것이 심각한 데이터의 경우 전문가와 변호사에게 문의하십시오.