2010-03-27 5 views
10

누군가 내 데이터를 쉽게 잡을 수 없도록 내 서비스의 데이터를 암호화 된 파일 (기본적으로 복사 방지)로 캐시합니다..NET 어셈블리에 암호화 키를 안전하게 저장하는 방법

그러나이 작업을 수행하려면 .NET 어셈블리 내에 암호화 키를 저장하여 이러한 파일을 암호화하고 해독 할 수 있어야합니다.

내 열쇠를 바로 잡을 수있는 Red Gate의 .NET Reflector와 같은 도구를 알고 있으므로이 방법을 사용하는 것이 안전하지 않다는 느낌을받습니다.이를 수행하는 모범 사례가 있습니까?

답변

11

허용되는 위험 수준을 결정해야합니다. 이렇게하는 "안전한"방법은 없습니다.

누군가 리플렉터를 사용하거나 System.Reflection.Assembly 클래스를 사용하여 어셈블리를 열어 리소스를 그런 식으로 잡는 위험이 너무 큰 경우 다음 단계는 아마도 서버에서 키를 다운로드하는 것입니다 당신이 시작할 때.

누군가 코드를 사용하는 동안 디버그와 같은 작업을 수행하고 그런 식으로 키를 가져야합니다. 캐시 된 항목을 만료시키고 키를 바꿀 수 있습니다. 개인이 각각 다른 사용자로부터 한 사용자의 데이터를 보호하기 위해 자체 키를 갖도록 만들 수 있습니다.

많은 일을 할 수 있지만, 누군가가 자신의 컴퓨터에 넣고있는 어셈블리가 해독 할 수있는 정보를 해독하지 못하도록 막는 것이 목표라면, 거의 불가능하다는 것을 알아야합니다. 당신이 할 수있는 일은 의 키/데이터를 도용하는 비용을 높이는 것입니다. 너는 그것을 막을 수 없다.

+0

+ 1 해커에게 무의미하고 비용이 많이 드는 것을 지적하기 위해 +1하지만, 또한 영향을 최소화하려고 노력해야합니다. (내 대답은 여기에 무엇을 의미하는지 설명하기위한 시도를 참조하십시오.) – lexu

+0

네 게시물을 읽고 나서 어떤 생각, 나는 그것이 모두 비용/위험 평가에 달려 있다고 생각했습니다. 대부분의 사람들이 컴퓨터 사용에 능숙한 사용자의 상위 5 ~ 10 %를 구해 내지 못하게하는 계획을 생각해 냈습니다. 이는 "수락 가능한"위험입니다. – Alex

+0

기쁩니다. 당신은 아마 올바른 결정을 내렸을 것이며, 그렇지 않다면 언제든지 그것을 바꿀 수 있습니다. ;) –

0

당신은 ENT 버튼을 누르면 DVR을 방지 할 수는 없지만 위조 데이터의 재 암호화를 방지 할 수 있습니다 :

만큼 코드가 다른 사람에 의해 액세스 할 수있는 컴퓨터에서 실행되는, 프로그램을 검사 것을 방지 할 수있는 방법은 없습니다 있습니다. Decompiling과 Analysis는 그러나 시간을들입니다. MaxGuernseyIII가 지적한대로, 그것은 수용 가능한 위협 수준에 관한 것입니다.

문제가 너무 많아 해커가 코드를 디 컴파일 할 수는 없지만 보호하려는 데이터 (라이센스를 소유 한 사람)를 변경할 수있는 경우가 많습니다.

따라서 public key cryptography 메서드를 사용하여 데이터를 암호화 할 수 있습니다. 그렇게 해커가 읽을 수는 있지만 다시 암호화 할 수는 없습니다.

+0

공용 키 암호화는 여기까지는 도움이되지 않습니다. 또한 데이터를 암호화하기 위해 PK 시스템 (RSA 이상)을 직접 사용하지 않으며 대칭 알고리즘으로 키를 암호화하는 데만 사용해야합니다 (예 : AES)). –

+0

그럼에도 불구하고 충분히 숙련 된 해커가이 문제를 해결할 수 있습니다. 분해하고, 자기 열쇠로 교환하십시오, 붐. 암호화 된 내용은 갑자기 읽을 수 있습니다. 당신은 그 데이터가 서버 측에 서명함으로써 서버로 피드백되는 것을 막을 수 있습니다. 그것은 모두 실제 필요가 무엇인지에 달려 있습니다. 이 질문들 중 많은 것들이 그렇듯이. –

+0

다시 암호화 할 필요가 없습니다. 캐시 된 파일은 사용자가 액세스하기 위해 비용을 지불하고 구독이 만료되면 더 이상 액세스 할 수 없도록하려는 것입니다. – Alex

0

최대 힌트 수로, 위협 모델을 고려해야합니다.

어떤 종류의 공격자가 걱정 되나요? (일부에 대해서는 우려하고 타인에 대해 우려하는 것은 합법적이지 않은 것이 합법적입니다.) 일반적인 범주는 "프로그램을 구매 한 컴퓨터가 아닌 사용자", "솔루션에 많은 시간을 할애하는 헌신적 인 사람", "온라인 균열을 찾는 방법을 알고있는 일반 사용자"등이 될 수 있습니다.

정확한 시나리오에 따라 다릅니다. , 솔루션은 다를 수 있습니다.

흥미롭고 흥미로운 점은 제품이 인기있는 경우 단 한두 명의 전담 직원이 앉아 휴식을 취한 다음 모든 사람에게 패치를 릴리스하는 것입니다. 이것은 소프트웨어의 특성입니다. 전체 응용 프로그램이 컴퓨터에서 실행될 때 해결되지 않는 문제입니다.

분명히 귀하의 응용 프로그램이 웹 사이트로 실행되는 경우, 즉 웹 사이트가 귀하의 컴퓨터에있는 경우 문제가되지 않는다는 의미입니다.

나는 이것이 특히 유용한 답변이 아니라는 것을 알고 있습니다.

+1

"위협"모델을 고려할 것을 암시 했습니까? ;) –

+0

@MaxGuernseyIII : 죄송합니다. 게시물을 작성하는 동안 내가 작업 한 내용을 추측 할 수있는상은 없습니다. P –

+0

Dang. 나는 리본을 원했다. –

관련 문제