하드 코딩 된 키
당신은 DLL의 공유/개인 키를 포함하면 DLL의 복사본을 가지고 다음 사람이 키의 복사본을 가지고 있습니다. 모델이 여러 사용자와 응용 프로그램을 공유하는 경우 모든 사용자는 동일한 암호화 키를 가지며 다른 사용자가 암호화 한 모든 항목을 암호 해독 할 수 있습니다. 응용 프로그램을 쉽게 사용할 수 있다면 공격자가 응용 프로그램 (따라서 키)을 가지고 있다고 가정해야합니다.
또한 모든 개발자는 소스 코드를 가지고 있으므로 프로덕션 암호화 키에 액세스 할 수 있습니다. QE는 아마도 바이너리에 액세스 할 수 있기 때문에 액세스 권한도 가지게됩니다. 이 두 내부자 그룹 중 하나는 귀하의 응용 프로그램이 고객을 보호하는 임의의 암호를 해독 할 수 있습니다.
이게 원하는가요? 일반적으로 나쁜 습관이지만 다른 환경보다 환경에 따라 더 나쁩니다. 예를 들어, 암호를 작성하는 방법을 배우는 코드를 작성하는 경우에는 아무 문제가 없습니다. 다른 사람이 사용할 수 없도록하십시오. 서비스를 작성하는 것은 나쁜 습관입니다. 위험하지만, 당신이 할 수있는 최악의 상황은 아닙니다. 여러 고객과 공유 할 내용을 작성하는 경우 이진에 키를 포함시켜 암호화 목적을 무효화하십시오.
그리고 난수 생성기 (암호 작성기로 강력한 난수 생성기 사용)를 파일에 저장하고 암호화 키로 사용하는 것이 그리 어렵지 않습니다. 내 추천은 별도의 키로 간다.
별도의 키
별도의 파일에 키를 제공하는 경우, 당신은 바이너리의 주요 운송에 의해 도입 된 모든 위험을 제거하지만 당신은 다른 사람을 소개합니다. 또는 다르게 말하면, 당신의 암호가 좋은 일을 할 수있게되었으므로, 당신이 올바르게 할 것인지, 아니면 여전히 쓸모 없게 할 것인지를 확인해야합니다.
암호는 강력한 임의 숫자 생성기를 사용하여 생성해야하므로 예측할 수 없습니다. 키를 안전하게 저장해야합니다. 키 파일의 전체 경로를 보호해야하며 적절한 암호가있는 사용자 만 키에 액세스 할 수 있도록 키 스토어와 같은 암호로 보호 된 저장소를 사용해야합니다.물론 마지막 단계는 배포 모델에 따라 다르며 무인 재시작이 필요한 경우에도 마찬가지입니다. 그리고 열쇠는 안전하게 사용되어야합니다 - 일정한 순서 조작, 의미 론적으로 파싱하기 전에 데이터의 무결성을 확인하는 것, 등등을 의미하지 않습니다.
출처
2012-04-12 13:16:55
atk
DLL 내부에 키를 하드 코드하면 완전히 쓸모없는 DLL. 그리고 왜 [crypto] (http://msdn.microsoft.com/en-us/library/9eat8fht.aspx)를 구현하고 싶습니까? – Jon
당신이 고려하고있는 모든 것은 안전하지 않습니다. 기껏해야 어둡습니다. 공격자로서 저는 암호 기능에 중단 점을 두었습니다. 암호 기능을 사용하여 열쇠를 받고 실버 태블릿에 표시 할 때까지 기다립니다. – CodesInChaos
먼저 실제로 수행하려고 시도하는 내용과 스레드 모델이 무엇인지 설명해야합니다. – CodesInChaos