2012-04-12 4 views
1

RC4, DES와 같은 암호화 알고리즘이 포함될 C# 클래스 라이브러리를 작성하려고합니다. 이들은 단일 키 암호화 알고리즘입니다.
이제 키 보호를위한 최상의 보안 결정을 원합니다. 해야합니까 내 열쇠 DLL을 내 하드 코드 또는 내 DLL을 사용하는 내 외부 응용 프로그램에서 내 키를 설정해야합니까? 분해 도구를 고려할 때 어느 것이 더 안전하다고 생각합니까?
큰 소리로 생각이 : 키 내 보안 라이브러리에
명시 적 또는 암시 적 암호화 키 C#

  • 을 하드 코딩하면 누군가는 그가 easly 내 치퍼 데이터를 디코딩 할 수 DLL을 찾아 자신의 C# 응용 프로그램에 가져올?
  • 보안 라이브러리에 키가 하드 코드되어 있지만 외부 응용 프로그램에서 키가 설정되어있는 경우 누군가 내 키를 찾기 위해 외부 응용 프로그램을 디 컴파일해야합니까?

보안 DLL을 사용할 외부 응용 프로그램의 키 값을 설정하는 것이 나에게 안전합니다. 어떻게 생각해?
감사합니다.

+1

DLL 내부에 키를 하드 코드하면 완전히 쓸모없는 DLL. 그리고 왜 [crypto] (http://msdn.microsoft.com/en-us/library/9eat8fht.aspx)를 구현하고 싶습니까? – Jon

+2

당신이 고려하고있는 모든 것은 안전하지 않습니다. 기껏해야 어둡습니다. 공격자로서 저는 암호 기능에 중단 점을 두었습니다. 암호 기능을 사용하여 열쇠를 받고 실버 태블릿에 표시 할 때까지 기다립니다. – CodesInChaos

+0

먼저 실제로 수행하려고 시도하는 내용과 스레드 모델이 무엇인지 설명해야합니다. – CodesInChaos

답변

0

하드 코딩 된 키

당신은 DLL의 공유/개인 키를 포함하면 DLL의 복사본을 가지고 다음 사람이 키의 복사본을 가지고 있습니다. 모델이 여러 사용자와 응용 프로그램을 공유하는 경우 모든 사용자는 동일한 암호화 키를 가지며 다른 사용자가 암호화 한 모든 항목을 암호 해독 할 수 있습니다. 응용 프로그램을 쉽게 사용할 수 있다면 공격자가 응용 프로그램 (따라서 키)을 가지고 있다고 가정해야합니다.

또한 모든 개발자는 소스 코드를 가지고 있으므로 프로덕션 암호화 키에 액세스 할 수 있습니다. QE는 아마도 바이너리에 액세스 할 수 있기 때문에 액세스 권한도 가지게됩니다. 이 두 내부자 그룹 중 하나는 귀하의 응용 프로그램이 고객을 보호하는 임의의 암호를 해독 할 수 있습니다.

이게 원하는가요? 일반적으로 나쁜 습관이지만 다른 환경보다 환경에 따라 더 나쁩니다. 예를 들어, 암호를 작성하는 방법을 배우는 코드를 작성하는 경우에는 아무 문제가 없습니다. 다른 사람이 사용할 수 없도록하십시오. 서비스를 작성하는 것은 나쁜 습관입니다. 위험하지만, 당신이 할 수있는 최악의 상황은 아닙니다. 여러 고객과 공유 할 내용을 작성하는 경우 이진에 키를 포함시켜 암호화 목적을 무효화하십시오.

그리고 난수 생성기 (암호 작성기로 강력한 난수 생성기 사용)를 파일에 저장하고 암호화 키로 사용하는 것이 그리 어렵지 않습니다. 내 추천은 별도의 키로 간다.

별도의 키

별도의 파일에 키를 제공하는 경우, 당신은 바이너리의 주요 운송에 의해 도입 된 모든 위험을 제거하지만 당신은 다른 사람을 소개합니다. 또는 다르게 말하면, 당신의 암호가 좋은 일을 할 수있게되었으므로, 당신이 올바르게 할 것인지, 아니면 여전히 쓸모 없게 할 것인지를 확인해야합니다.

암호는 강력한 임의 숫자 생성기를 사용하여 생성해야하므로 예측할 수 없습니다. 키를 안전하게 저장해야합니다. 키 파일의 전체 경로를 보호해야하며 적절한 암호가있는 사용자 만 키에 액세스 할 수 있도록 키 스토어와 같은 암호로 보호 된 저장소를 사용해야합니다.물론 마지막 단계는 배포 모델에 따라 다르며 무인 재시작이 필요한 경우에도 마찬가지입니다. 그리고 열쇠는 안전하게 사용되어야합니다 - 일정한 순서 조작, 의미 론적으로 파싱하기 전에 데이터의 무결성을 확인하는 것, 등등을 의미하지 않습니다.

+0

자세한 답변 해 주셔서 감사합니다. 암호로 강력한 난수 생성기를 사용하여 임의의 키를 생성하고 별도의 파일로 유지하는 것이 더 좋습니다. 그리고 난 그 하드 코딩 된 키를 사용하여 DLL에 끔찍한 이해합니다. 더 많은 것은, 나는 datasharing를 위해 무작위 열쇠를 사용하기 위하여 나의 클라이언트를 말할 것이다. 그들은 고정 키를 사용하여 주장한다면, 내 데이터가 실제로 보호되지 않을 것 같아요. TCP를 통해 먼저 임의의 키를 생성하고 내 클라이언트를 내게 연결해야합니다. 그런 다음 클라이언트는 그 키로 내 치퍼 데이터를 해독하고 반대의 경우도 마찬가지입니다. – Fer

+0

@fer : 또한 고객을 대신하여 위험을 감수해야합니다. 고객이 서로 공유하려고하는 비밀에 정말로 액세스하고 싶습니까? 당신은 당신의 고객이 * 당신이 그런 접근을 원할 것이라고 생각합니까? 고객에게 무엇이 안전하고, 왜 안전하며, 위험을 덜 수 있도록 선택하면 고객에게 알려야합니다. 그리고 코드가 할 수있는 한 (고객을위한 키를 만들거나 자신의 코드를 업로드 할 수있는 한) 보안 모드를 완벽하게 지원하십시오. 그런 다음 의도적으로 안전하지 못한 일을하는 것은 고객의 책임입니다. – atk

+0

나는 또한 언급해야한다 : 당신은 당신의 자신의 암호 알고리즘을 작성하면 안된다. 또는 기존 암호 알고리즘을 다시 작성하십시오. 잘 검토되고 잘 테스트 된 기존의 암호화 라이브러리를 사용해야합니다. 아주 작은 코딩 오류조차도 심각한 위험을 초래할 수 있습니다. – atk

관련 문제