2009-03-06 3 views
11

우리는 비공개로 유지하려는 일부 데이터 (웹 서버에 로컬)를 사용하는 인트라넷 응용 프로그램 (C#)을 개발 중입니다. 이 데이터는 기존 데이터 저장소를 사용하여 암호화됩니다 (AES). 우리는 기계에 물리적으로 접근하는 것을 완전히 막을 수는 없습니다..NET 응용 프로그램에서 어떻게 암호화 키를 숨 깁니까?

확실히 완벽한 보안 기능은 제공되지 않습니다. 그러나 누구든지 데이터에 대한 무단 액세스를 가능한 한 어렵게 만들고 싶습니다.

키를 저장하는 것이 가장 좋은 방법입니다. 일부 컴퓨터 고유 ID를 기반으로 암호화하는 것은 옵션이지만 해당 정보는 컴퓨터에서 진단 도구를 실행하는 모든 사람이 쉽게 사용할 수 있습니다.

응용 프로그램에서 인코딩하는 것은 옵션입니다 (응용 프로그램 제외). 그러나 .NET 어셈블리는 디 컴파일이 매우 쉽습니다. 그래서, 그것을 난독 처리하고, 암호화 발사기를 사용하고, 컴파일하는 것이 가장 좋을까요?

내가 누락 된 옵션이 있습니까?

우리는 분명히 분명합니다. 누군가가 결정되면 그것은 잃어버린 원인이 될 수 있습니다. 그러나 우리는 제약 조건에서 가능한 한 열심히하려고합니다.

답변

5

암호화는 .NET 구성 시스템에 내장되어 있습니다. 개인 키를 저장할 위치를 포함하여 app/web.config 파일의 청크를 암호화 할 수 있습니다. 누군가가 당신의 프로그램에 디버거를 연결할 수있는 경우

http://www.dotnetprofessional.com/blog/post/2008/03/03/Encrypt-sections-of-WebConfig-or-AppConfig.aspx

+0

이것은 내가 과거에 해낸 방법입니다. –

+0

컴퓨터에 액세스 할 수있는 경우 암호화 된 섹션을 참조하는 응용 프로그램을 작성할 수 없으며 일반 텍스트가 전달됩니다. 나는 당신이 기계에 접근 할 수 없다면 이것이 안전하다고 생각했다. – user74824

+0

@yahoo : 정확합니다. – NotMe

2

은 절대적으로 당신이 할 수있는 일은 없다. 그들은 설정을 알아 내거나 앱을 분해 할 필요가 없습니다. 앱을 실행하면 키 빙고를 볼 수 있습니다.

이러한 조건에서 난독 화가 도움이되지 않습니다.

가장 좋은 방어 방법은 키를 보호하기 위해 하드웨어를 사용하는 것인데 암호화를 수행하지만 키 자체를 내 보내지는 않습니다 (전선 탐색, 저온/방사선/다른 새로운 것들). IBM은 적절한 도구 (Google IBM-4764)를 사용하지만 값이 싸지는 않습니다.

3

당신이 후, 일정 숨어라고하는 것을, 난독 용어로 말하기 즉, 당신이 말하는,로 상수를 변환하는 수단, 다시 구체화을 런타임에 실행되는 기능과 계산의 수는 일정하게 말했다 .

이것은 여전히 ​​난독 화 영역에 속하며 공격자가이 상수와 관련된 코드를 간단히 매핑하고 값을 검색하기 위해 별도의 응용 프로그램에서 실행하는 코드 추출의 영향을 받기 쉽습니다. 또는 원하는 값으로 스캔하기 위해 응용 프로그램의 메모리를 올바른 위치로 덤프 할 수 있습니다.

약간, 특히 암호화 키를 숨기는 더 진보 된 방법을 다른이 본질적으로 함께 베이킹, 주어진 키에서 암호 기능을 생성을 통해 키가없는 암호를 사용 화이트 박스 암호화을했다. 이름에서 알 수 있듯이이 방법은 화이트 박스 공격 시나리오 (심지어 공격자가 바이트 코드에 액세스 할 수 있고 런타임에 실행 파일을 검사하고 조작 할 수 있음)에서도 복원력을 발휘하도록 고안되었습니다.

이들은 모두 모호함을 통해 보안을 달성하는 매우 진보 된 방법이며, 처음에이 작업을 수행하도록 강요하지 않는 대체 모델을 고려해 볼 가치가 있습니다.

관련 문제