2009-05-21 4 views
19

내가 알고 싶은 것은 설정 파일에서 연결 문자열을 암호화하는 확실한 방법입니다..Net 암호화

  1. 기계 수준의 암호화를 사용하여, 사람이 내 서버가 연결 문자열의 내용을 읽을 수있는 작은 닷넷 프로그램을 작성 액세스 할 수 없습니다 : 여기 내 질문은?

  2. 엔터프라이즈 환경의 사용자 컴퓨터에 응용 프로그램을 배포하고 응용 프로그램에 구성 파일에 연결 문자열이있는 경우 응용 프로그램 만 해독 할 수 있도록하려면 어떻게해야합니까? 이 시나리오는 ClickOnce 배포 시나리오에서 특히 흥미 롭습니다. 필자는 게시자 서버에서 암호화되지 않은 구성을 저장하고 처음으로 응용 프로그램을 다운로드, 설치 및 실행할 때 컴퓨터 수준에서 암호화하는 방법에 대해 읽었습니다. 이것은 나에게 너무 잘못 들린다. 즉, 와이어를 통해 보호되지 않은 연결 문자열과 다운로드 및 응용 프로그램 실행 사이에 짧은 시간 동안 앉아 있지 않은 연결 문자열.

  3. 공개 키와 개인 키가 있고, 앱에 서명하고, 설정 파일을 키로 암호화 할 수 있습니까? 사용자가이를 실행하면 서명 된 응용 프로그램에서만 암호 해독이 가능합니까?

  4. ClickOnce를 사용하고 있기 때문에 버전 #이 변경되지 않으면 ClickOnce가 변경 사항을 감지하지 않기 때문에 암호화 된 중요한 정보가 코드에 포함되거나 포함될 수 있습니다. 따라서 연결 문자열을 변경하면 다시 컴파일해야 app.config의 지점이 음소거됩니다. 설정 파일을 사용하여 서버, 클라이언트 및 그 사이의 연결 문자열을 보호하기 위해 다른 방법을 사용할 수 있습니까?

+0

첫 번째 질문에 대해 자세히 설명해 주실 수 있습니까? "기계 수준"암호화 란 무엇입니까? – nightcoder

+0

내가 아는 한, 내장 암호화를 사용하여 컴퓨터 수준 및 사용자 수준에서 암호화 할 수 있습니다. 예를 들어, configSection.SectionInformation.ProtectSection ("RSAProtectedConfigurationProvider"); 또는 aspnet_regiis.exe –

+1

아마도 어제 물어 본 이전 질문 (http://stackoverflow.com/questions/890396/click-once-how-to-encrypt-connection-strings)보다 더 자세히 설명하는 것이 좋습니다. 다르게 질문하는 중복 된 질문을 만드십시오. – Pwninstein

답변

13
  1. 예. 컴퓨터 키로 암호화 된 암호는 컴퓨터 키에 대한 액세스 권한이있는 모든 프로세스에서 해독 할 수 있습니다.사용자 키로 암호화 된 비밀은 동일한 사용자가 시작한 모든 프로세스에 의해 해독 될 수 있습니다.
  2. 이것은 불가능합니다. 모든 반대 주장은 뱀 기름입니다. 응용 프로그램은 무언가를 해독 할 수있는 비밀이 필요합니다. 응용 프로그램 내에서 비밀을 숨길 수있는 알려진 스키마가 없습니다. 다양한 난독 화 기법이 있지만 방탄은 없습니다. 당신이 할 수있는 최선은 술집을 높이는 것입니다.
  3. 아니요. 애플리케이션에 무언가를 해독 할 수있는 비밀 키가 있거나 2 번으로 돌아 가거나 애플리케이션에 공개 키가있는 경우 누구나 동일한 비밀번호를 해독 할 수 있으므로 기본적으로 유효성 검사를 수행합니다 (구성이 변경되지는 않았지만) 구성은 비밀이 아닙니다.
  4. 응용 프로그램에 보안을 안전하게 포함 할 수 없습니다. 보호 자산 (비밀)이 그만한 가치가 있다면 가격이 얼마나 높은지 문제 일뿐입니다. 그러면 해커가 그 가치를 얻습니다.

암호화 인프라는 현재 사용자의 비밀을 다른 사용자로부터 보호하도록 설계되었습니다. 그것은 그것을 사용하는 사용자로부터 응용 프로그램의 비밀을 보호하도록 설계되지 않았습니다. 당신이 요구하는 것은 암호화가 아니며, DRM이며, DRM 인프라를 조사해야합니다. 나는 DRM API 주변의 관리 라이브러리에 대해 알지 못한다.

+0

Rusanu에게 감사드립니다. 도와 주셔서 감사합니다. –

3

실제로 좋은 질문,

당신은하지 않을 수 있는지 아무도 연결 문자열 (또는 비밀번호)를 해독합니다. 물론 암호화 할 수는 있지만 사람들은 응용 프로그램을 디 컴파일하여 사용할 암호화 알고리즘과 연결 문자열/암호의 암호 해독에 사용하는 키를 볼 수 있습니다. 어쩌면 그것은 극단적 인 시나리오와 비슷할 수도 있지만 가능한 일입니다 (저는 학생 시절에 사악한 크래커였습니다 :)). 따라서 시나리오를 두려워하는 경우 애플리케이션을 보호해야하므로 분해하기가 더 어려워 야합니다. 다른 토론을위한 주제이지만, 예를 들어 Dotfuscator 또는 다른 좋은 난독 화기를 사용할 수 있습니다. 그러면 크래커가 애플리케이션 내부에서 무슨 일이 벌어지고 있는지 이해하기가 더 어려워 질 것입니다.
그래서, 가능한 해결책 중 하나는 "연결 문자열 암호화 + obfuscator 사용"일 수 있지만, 말했듯이 100 % 보호 기능을 제공하지는 못합니다.

2

대칭 암호화를 사용하여 비밀 정보를 저장하는 것은 암호를 요구하거나 다른 하드웨어 솔루션을 사용하여 특수 하드웨어와 같이 암호를 해독하지 않는 한 항상 문제가 있습니다. 시스템에 완전한 키를 저장해야하는 경우 다른 사람이 키를 검색 할 수있는 방법이 있습니다.

나는 확실히 운영 체제의 메커니즘을 사용하려고합니다. MS-SQL을 사용하여 순수 Windows 환경에서 작업하는 경우 사용자/암호 대신 통합 보안을 사용해야합니다. 다른 데이터베이스도 비슷한 기능을 수행 할 수 있습니다.
또 다른 (약한) 옵션은 운영 체제의 보안 설정으로 일반 텍스트 파일을 보호하는 것입니다. 사용자 만이 파일에 액세스 할 수 있습니다. 그러나 관리자와 사용자는 관리자를 신뢰해야합니다. 이 경우 대칭 암호화를 추가로 사용해야합니다. 하지만 내 첫 번째 주장을 읽어보십시오. 정말 안전하지는 않을 것입니다.

0

구스타보 당신은 이것을 구현할 수 있습니다. (이것은 로그인 기반 응용 프로그램에 대한 나의 계획입니다.)

사용자가 .Net 앱에서 자격 증명을 입력합니다. 자격 증명은 .php 서버 측 응용 프로그램으로 전달되어 데이터베이스에 로그인하고 키를 검색하여 .Net 응용 프로그램으로 다시 전달합니다. 그런 다음 키는 .Net 앱의 하드 코딩 된 암호화 된 연결 문자열에 사용되어 전체 데이터베이스 액세스를 허용합니다.