나는 일반적으로 첫 번째 접근법을 정말로 좋아합니다.
- 이해하고 구현하는 것은 간단합니다
- 안전하다 (나의 지식으로)
- 과거에 사용 된 드문 접근법이 아닙니다.
내가 명심해야 할 첫 번째 사항에 대해 언급하지 않은 한 가지, 토큰을 해시하는 데 사용 된 타임 스탬프에는 TTL 만료가 너무 짧아서 (1 초와 같이) 메시지가 전송되지 않았 음을 확인합니다 12 시간 전 메시지의 동일한 타임 스탬프 및 토큰; 분명히 합법적으로 계산되지만이 경우에는 그렇지 않습니다.
이것들이 당신이 고려하고있는 유일한 두 가지 옵션이라면, 나는 많은 방법이 있기 때문에 다른 접근법도 살펴보고 싶습니다. 내가 실제로 나열하는 것 이상. 이것들은 당신의 목적에 더 잘 맞는지 알아보기 위해 공부할 가치가있는 일반적인 인증 접근법이며, 다른 것을 이해하지 않으면 어떤 접근법을 강화할 것인지에 대한 아이디어를 얻을 수 있습니다.
메모를 수행, 나는 하지 보안 전문가.
OAuth / 연합
이 방법에서는 소비 코드가 토큰 / 인증서 / 자신의 토큰을 요청하고이를 전달하는 제 3 자 보증인이 있습니다.이 시점에서 필요한 것은 제 3 자에게 제공된 키가 합법적입니다.
찬성:
- 표준 기반
- 다른 사람의 시스템에서 다른 사람이 문제를 발견하므로 불안이 발생하는지 확인할 수 있습니다.
- 인증 작업이 훨씬 덜 필요합니다.
범죄자:
- 기본 서비스에서 인증을 분리하려면 타사 서비스 담당자 및 해당 API를 처리하거나 고유 한 "타사"를 생성 및 호스팅해야합니다.
- 많은 서비스 잔인하지만 개념적으로 고려할 가치가있는 경우
비동기 인증서
여기에서 클라이언트가 사용자를 만들 때 공유 한 공용 인증서로 통신을 암호화하게합니다. 귀하는 귀하와 관련된 개인 키를 사용하여 암호를 해독합니다. 일반적으로 챌린지-응답과의 통신을 시작하여 그들이 누구라고 주장하는지 예상 할 때 암호화 / 암호 해독 할 수 있음을 보여줍니다. 챌린지 응답을 사용하지 않는 "동기"접근 방식이 가능하지만 보안이 약간 떨어지고 시간 동기화 문제가있어 까다로울 수 있습니다.
에서 노벨 (그래 정말? 노벨, 알아?)
토큰은 일회성 비밀번호를 생성하는 기준으로 변수를 사용합니다. 이 변수를 시도라고합니다. 암호를 생성하는 데 사용되는 변수를 결정하는 두 가지 주요 방법은 비동기 또는 동기입니다.
비동기식 또는 챌린지-응답 방법을 사용하면 서버 소프트웨어는 토큰 장치가 암호화 할 외부 챌린지 (임의로 생성 된 변수)를 토큰에 보냅니다. 토큰은이 챌린지 변수, 암호화 알고리즘 및 공유 암호를 사용하여 올바르게 암호화 된 응답 인 응답을 생성합니다.
동기식 방법을 사용하면 비밀번호를 생성하는 데 사용 된 시도 변수는 토큰과 서버에 의해 내부적으로 결정됩니다. 각 장치 내에서 시간 카운터, 이벤트 카운터 또는 시간 및 이벤트 카운터 조합이 챌린지 변수의 기초로 사용됩니다. 토큰과 서버는 각각 자체적으로 자체 카운터에서 챌린지 변수를 내부적으로 결정하므로 시간 카운터와 이벤트 카운터가 동기화 상태를 유지하는 것이 매우 중요합니다. 서버와 토큰의 동기화가 매우 쉽지 않기 때문에 대부분의 구현에서는 카운터간에 일정량의 드리프트를 허용합니다. 일반적으로 이러한 카운터 값의 작은 범위 또는 창은 암호를 계산하는 데 사용됩니다. 그러나 토큰과 서버가이 창을 벗어나 동기화되지 않으면
찬성:
- 인증서에는 신뢰할 수 있고 위조하기 어려운 CA 루트가 있습니다.
- 인증서 저장소를 쉽게 관리 및 유지 관리하기위한 운영 체제에는 표준 기능이 있습니다.
- 잘 연구 된 접근 방식, 사용 가능한 많은 정보
- 다양한 다른 것들과 함께 만료는 표준 인증서의 내장 기능이며 일반적으로 강력합니다.
범죄자:
- 인증서는 프로그래밍 방식으로 작업하기 까다로울 수 있습니다.
- 외부 CA가 필요한지 여부에 따라 무료가 아닐 수 있습니다
- 예상 루트 트러스트가 구성되도록 인증서 저장소를 수동으로 유지 관리해야 할 수 있음
NTLM
이것이 작거나 내부 전용 서비스이고 Windows 환경에있는 경우 표준 NTLM 인증을 사용하여 액세스를 보장하는 데 아무런 문제가 없습니다. 특히 IIS를 사용하는 경우 가장 간단한 방법입니다. web.config에서도 유지 관리 및 구성이 쉽습니다.
찬성:
범죄자:
- 최소한의 상호 운용성
- 공개 인증에는 충분하지 않습니다
논 세스
인증 방식에서 nonces로 작업 할 때 서비스에서 nonce를 얻는 방법을 제공합니다. 이 메소드는 각 요청에서 고유 한 임의의 문자열 또는 데이터 조각 ( "nonce")을 리턴합니다. 다른 방법에 대한 모든 요청은 이제 nonce를 검색해야하며 요청에 대한 암호화 알고리즘에서 사용됩니다. 여기서 값은 서버가 사용 된 넌스를 추적하고 넌스의 재사용을 허용하지 않는다는 것입니다. 이는 하나의 넌 스가있는 요청이 있으면 해당 넌스에 대한 요청을 다시 만들 수 없기 때문에 재생 공격을 완전히 방지합니다. nonces가 요청되면 사용 가능한 nonces 목록에 추가됩니다. 사용 된대로 사용 가능한 목록에서 사용 된 목록으로 이동됩니다.
찬성:
- 아주 잘 재생 공격을 방해
- 구현하거나 이해하기가 전혀 어렵지 않습니다.
범죄자:
- 클라이언트는 각 요청마다 두 개의 요청을해야합니다 ( 특정 요청 에 대해서만 논스를 요구함으로써 줄일 수 있음 )
- nonces 관리가 필요합니다.
- nonces에 대한 추가 요청을 요구하여 성능에 부정적인 영향을 미칩니다 (트랜잭션은 nonces로 작업하는 데 드는 자원 비용을 추가로 증가시킵니다)