2012-02-13 1 views
1

원래 eToken 장치에서 가져온 'my'인증서 저장소에서 x509Certificate2를 사용하는 .NET (C#) 응용 프로그램이 있습니다.여러 프로세스에서 eToken PIN을 캐시하는 방법

데이터를 해독하거나 웹 요청에 대한 클라이언트 권한으로 사용하는 인증서를 사용할 때 장치 PIN을 한 번 물어 봅니다. 그 후, 그것은 캐시되며, 사용자는 매 xx 분마다 비밀번호 요청을 듣지 않아도됩니다.

이제 모든 프로세스가 인증서를 사용합니다. 이러한 각 프로세스는 장치 PIN을 요청합니다. (캐시는 프로세스 당 것 같습니다).

쉬운 방법이 있습니까? PIN을 반복해서 요청하지 않고 모든 프로세스가 토큰에 액세스 할 수 있도록 어딘가에 캐시 할 수 있습니까?

답변

2

주의 사항 : 이러한 종류의 'PIN'캐싱을 수행하는 것은 정말 안 좋은 습관입니다. 모든 자격 증명은 공격자가 시스템의 메모리를 모니터링하여 PIN에 대한 정보를 얻을 수 없도록 가능한 한 간단히 메모리에 저장해야합니다. 일반적으로 시스템에 대한 로컬 액세스가 필요하지만 대부분의 경우 시스템 관리자가 PIN을 스누핑하지 못하도록하기 때문에 여전히 관련 위협으로 간주됩니다.

그건 사실입니다. 매초마다 PIN을 입력해야하는 사용자를위한 PITA. 보안과 많은 측면에서 보듯이 보안과 유용성 사이에는 절충점이 있습니다.

많은 스마트 카드 드라이버가 사용자가 알아챈 것처럼 이러한 형태의 캐싱을 수행합니다. 종종 카드에는 카드에 두 개의 인증서/키가 있는데, 하나는 문서에 서명을 제공하는 것과 같이 높은 보안 작업으로 간주되는 부인 방지 키 사용이고, 다른 하나는 항상 반복되는 집안일에 사용되는 '인증 ​​인증서'로 간주됩니다 서비스로 인증하는 것. 일반적으로 부인 방지 키에 액세스 할 때마다 PIN을 다시 입력해야하지만 드라이버는 인증 키에 PIN을 캐시하는 경우가 많습니다.

그래서 실제로는 특정 사용 사례에 따라 달라집니다 - 작업이 매우 중요하다고 생각하면 모든 캐싱을하지 말 것을 권장합니다. 대신 사용자를 '교육'하십시오. 자신의 이익 등을위한 것입니다. :)

그렇지 않으면 위험을 수용 할 수 있다고 생각되면 프로세스간에 PIN을 공유하는 데 가장 적합한 프로세스 간 통신 형식을 사용할 수 있습니다. 간단한 솔루션은 애플리케이션에만 읽기/쓰기 권한이있는 디렉토리에 'PIN 파일'을 생성하는 것입니다. PIN이 필요할 때마다 파일 존재 여부를 확인하십시오 (경쟁 조건에주의하십시오!). 파일이 아직없는 경우 PIN을 요청하여 파일에 기록하십시오. 그렇지 않으면 단순히 파일에서 PIN을 읽으십시오. PIN을 전달하는 데 사용 된 0으로 메모리를 덮어 씁니다.

+0

나는 이것이 일종의 까다로운 보안 현명한 것이라는 것을 알고있다. – kclement

+0

응용 프로그램은 주기적으로 인증서를 사용하는 백그라운드 서비스 (약 5 분마다)가 실제로 작동하지 않습니다. 5 분마다 키를 묻습니다 (배경). 나는 한 번 (일종의 로그온/시작) 키를 묻는 것을 선호합니다. 또한 PIN에 대한 액세스 권한도 없습니다. PIN이 필요한 정보를 요청할 때마다 드라이버가 질문을 팝업하고 나에게 인증서를 보내줍니다. PIN을 볼 수 없으므로 PIN을 저장할 수 없습니다. – kclement

+0

여러 프로세스에서 스마트 카드를 동시에 사용하는 것은 회색 영역입니다. 그러나 PKCS # 11로 직접 이동하지 않으면 드라이버의 PIN 콜백을 무시할 수 있습니다. 올바르게 처리한다면, 이것에 대해 비 윤리적 인 것은 없습니다. 그러나 물리적으로 PIN을 저장하지 않으려면 프로세스 대신 스레드로 전환하는 옵션입니까? – emboss

관련 문제