2012-05-29 3 views
2

우리는 웹 응용 프로그램을위한 2 단계 인증 프로세스를 구축했습니다. 우리는 매분 8 자리 보안 코드를 생성하는 작은 독립 실행 형 응용 프로그램을 만들었습니다. 사용자가 로그인하면 보안 코드를 입력하라는 메시지가 나타납니다. 웹 앱을 제출하면 보안 코드가 생성되고 입력 된 보안 코드와 비교됩니다. 두 값이 같으면 사용자는 응용 프로그램에 들어갈 수 있습니다. 이것은 RSA 토큰처럼 사용됩니다.보안 코드 생성/비교 및 ​​원자 시계

그러나 원자력 시계 서버를 사용하여 시간대와 시계 동기화가 문제가되는 것처럼 보안 코드 생성이 USB 응용 프로그램과 웹 응용 프로그램에서 동일하다는 것을 확인했습니다. 이것은 서버가 때때로 신뢰할 수 없기 때문에뿐만 아니라 방화벽 규칙을 추가하여 특정 원자 시계를 사용할 수있게해야하기 때문에 고통이됩니다. 원격 원자 시계를 사용하지 않고도이를 수행 할 수있는 안전한 방법이 있습니까?

답변

2

정확한 시계가 아니라 오히려 동일한 값이 필요합니다. 따라서 동일한 웹 앱에서 일종의 '현재 시간'서비스 (예 : JSON 응답으로 기본 HTTP 가져 오기/현재 시간 표시)를 노출하고 USP 앱에서 쿼리합니다. 이 경우 앱을 제공하는 서버간에 시간을 동기화해야합니다 (둘 이상인 경우).

1

응용 프로그램이 완전히 RSA 토큰 보안 일 필요가없는 경우 마지막 2 개 또는 3 개의 보안 코드를 허용하도록 웹 응용 프로그램을 수정할 수 있습니다. 그렇게하면 시간 일관성에 크게 의존하지 않게됩니다.

시간 동기화가 필요한 경우 웹 응용 프로그램과 USB 응용 프로그램에서 액세스 할 수있는 자신의 시간 서버를 실행할 수 있습니다. 시간은 일관되어야하며 반드시 정확해야합니다.

0

시간대를 조작 할 수 있다면 (예 : 중간자 공격, 악의적 인 업스트림 DNS 변경 등) 외부 시간에 의존하면 나쁜 생각입니다. 미래 가치를 수집하는 장치.

자신의 암호화를 수행하기 전에 보안 요구 사항을 실제로 평가해야합니다. 암호로 보호되지 않은 PRG, 사이드 채널 타이밍 공격 등을 실수로 사용하는 등 여러 가지 실수로 희생 당하기 쉽습니다.

프로덕션 환경에서이 작업을 수행해야하는 경우 검토가 가능하도록 구현을 열어야합니다.