암호화 키 저장 — 모범 사례?
대칭 암호화 알고리즘을 사용하는 웹 응용 프로그램이 있습니다.
비밀 키와 초기화 벡터를 어떻게 저장 하시겠습니까? 코드에 리터럴로 저장하는 것은 나쁜 생각처럼 보입니다. 앱 설정은 어떻습니까? 여기서 가장 좋은 방법은 무엇입니까?
웹앱 세계의 한 가지 표준 접근 방식은 키를 분할하여 다른 위치에 배치하는 것입니다. 예를 들어 키를 분할하여 파일 시스템 ( 'webapps'디렉토리 외부)에, 일부를 JNDI 구성 (또는 .net에 해당)에, 일부를 데이터베이스에 넣을 수 있습니다. 백업 미디어 또는 SQL 삽입 검사와 같이 손상을 입은 경우 단일 조각을 얻는 것은 특히 어렵지 않지만 모든 조각을 얻으려면 훨씬 더 많은 작업이 필요합니다.
동일한 크기의 난수로 키를 XOR 처리하여 키를 분할 할 수 있습니다. (암호 적으로 강력한 난수 생성기를 사용하십시오!) 키를 여러 조각으로 분할하려면이 프로세스를 여러 번 반복 할 수 있습니다. 프로세스가 끝나면 p1 ^ p2 ^ p3 = 키와 같은 세 개의 부분 키가 필요합니다. 예를 들어 JNDI 속성에 적절하게 저장할 수 있도록 일부 키를 base64로 인코딩해야 할 수도 있습니다.
(예를 들어, 키를 재생성하기 위해 모든 조각을 필요로하지 않는 n-of-m 알고리즘과 같이 키를 분할하는 더 정교한 방법이 있지만 여기에서 필요한 것 이상입니다.)
사용자가 적극적으로 암호를 입력하도록 요구할 수있는 경우 암호를 좋은 대칭 키로 변환하는 PBE (암호 기반 암호화) 알고리즘이 있습니다. 외부 파일도 필요한 파일을 찾고 싶습니다. 다시 말하지만 테이프 백업이나 암호 자체만으로는 충분하지 않습니다. 둘 다 필요합니다. 이것을 사용하여 JNDI를 사용하여 암호를 두 부분으로 분할 할 수도 있습니다. JNDI에서는 일반 텍스트 암호를 사용하고 파일 시스템의 어딘가에 초기화 파일을 사용할 수 있습니다.
마지막으로, 무엇을하든 애플리케이션을 상당히 쉽게 'rekey'할 수 있습니다. 한 가지 방법은 위에서 얻은 암호를 사용하여 실제 암호화 키가 포함 된 다른 파일의 암호를 해독하는 것입니다. 이렇게하면 모든 데이터를 대량으로 재 암호화하지 않고도 보안이 침해되었다고 생각되는 경우 암호를 쉽게 변경할 수 있습니다. 실제 키를 다시 암호화하기 만하면됩니다.
응용 프로그램이 시작될 때마다 대화식으로 암호를 입력 할 수 있습니까? 이렇게하면 키를 저장할 필요가 없습니다. 또는 최소한 모든 키 (대칭 키이든 개인 키이든)를이 "부트 스트랩"암호로 암호화 할 수 있습니다.
그렇지 않은 경우 비밀 키를 파일에 저장하고 권한을 수정하여 웹 애플리케이션을 실행하는 사용자 만 액세스 할 수 있도록합니다.
이러한 접근 방식은 플랫폼에 구애받지 않습니다. 보다 구체적인 제안을 위해 플랫폼에 대한 정보가 도움이 될 것입니다.
그런데 초기화 벡터는 하나의 메시지에만 사용해야합니다. 그리고 IV는 비밀로 유지되지 않으므로 어디에나 저장할 수 있지만이를 사용하는 하나의 메시지와 함께 저장하는 것이 일반적입니다.
내 응용 프로그램이 시작될 때 대칭 키가 필요하고 특정 파일에서 찾을 수있는 접근 방식을 사용했습니다. 응용 프로그램이 시작되면 파일을 제거합니다. 필요한 재시작을 위해 파일 사본이 원격으로 보관됩니다. 응용 프로그램이 자주 다시 시작되는 경우 분명히이 접근 방식은 실행 가능하지 않습니다.
또 다른 대안은 Windows 인증서 저장소와 같은 인증서 관리자입니다. 인증서와 키를 안전하게 저장할 수 있으며 개인 키를 내보낼 수없는 것으로 표시 할 수도 있으므로 키를 꺼내려면 심각한 해킹이 필요합니다. 애플리케이션은 인증서 저장소에서 인증서를로드하고 요청에 서명하거나 새 대칭 키를 생성하는 작업을 호출 할 수 있습니다. 또한 특정 권한있는 계정 만 인증서에 액세스 할 수 있도록 다른 인증서 저장소에 권한을 할당 할 수 있습니다.
web.config에 붙여 넣고 해당 섹션을 암호화하십시오.
이 SO 질문 은 web.config 암호화에 대해 자세히 설명합니다.
이것은 도움이 될 것입니다 ...
http://msdn.microsoft.com/en-us/library/ms998280.aspx
그러나 데이터 보호에 대해 진지하게 생각하는 경우 PKI를 사용하는 것이 좋습니다.
참고 URL : https://stackoverflow.com/questions/723653/storing-encryption-keys-best-practices
'Programing' 카테고리의 다른 글
Android Studio 2.3의 독립 실행 형 SDK 관리자 옵션 (0) | 2020.12.09 |
---|---|
Safari에서 교차 도메인 쿠키 설정 (0) | 2020.12.09 |
Excel range.Rows 속성은 실제로 어떤 역할을합니까? (0) | 2020.12.09 |
Git : 삭제 된 코드 찾기 (0) | 2020.12.09 |
Rails 3에서 ActiveRecord 연결 범위를 어떻게 지정합니까? (0) | 2020.12.09 |