저는 온라인에서 홈 뱅킹 계정을 안전하게 온라인으로 액세스하거나 내 계정에 액세스하기 위해 RSA SecureID ® 키를 꽤 오랫동안 (아마 10 년) 사용하고 있습니다. 이 키는 만료되도록 설정된 6 자리 숫자 토큰을 생성합니다. 그러나 이러한 키가 어떻게 작동하는지 항상 궁금했습니다.

RSA SecurID keyfob

오른쪽에는 초당 한 번씩 깜박이는 점 (사진에 표시되지 않음)이 있고 왼쪽에는 세로로 쌓인 6 개의 가로 스택이 있습니다. 각각 10 초에 한 번씩 사라집니다. 60 초가 지나면 토큰이 자체적으로 재설정되고 이전 토큰이 무효화됩니다.

AFAIK 이러한 장치는 네트워크를 사용하지 않으며 생성 된 번호는 서버에서 확인해야합니다. 서버는 은행 또는 회사의 서버 임). 따라서이 장치에는 작은 배터리로 구동되는 매우 정확한 타이머를 포함하는 메커니즘으로 난수를 생성하는 알고리즘이 저장되어 있어야합니다. 서버는 동일한 시간 간격으로 생성 된 숫자의 유효성을 확인해야하기 때문에 타이머는 매우 정확해야합니다. 모든 사용자 / 직원에 대해 서버는 내가 이해하는 한 동일한 난수 생성 알고리즘을 고객 / 직원당 하나의 알고리즘과 함께 저장해야합니다. 물론 칩은 도난 당하면 장치가 고장 나더라도 공격자가 저장된 난수 생성 알고리즘에 액세스 할 수 없도록 구성되어야합니다.

이게 작동하는 방법인가요?

감사합니다!

댓글

  • 같은 방식으로 TOTP 작동하지만 후자를 제외하면 ' 고가의 솔루션을 구입할 필요가 없으며 일반 전화 또는 기본 계산이 가능한 모든 장치를 사용할 수 있습니다. 스마트 워치도 .
  • 소프트웨어 정의 OTP는 시드 복제에 대한 저항력을 얻는 데 필요한 변조 저항을 얻지 못하기 때문에 매우 나쁩니다. Micro-USB 케이블과 올바른 도구 만 있으면 누구나 < 5 분 안에 휴대 전화를 복제 할 수 있습니다. 암호로 보호 된 경우 암호화 된 클론은 악성 소프트웨어 나 숄더 서핑을 통해 코드를 얻을 때까지 저장할 수 있습니다. 오늘날 일부 전화기는 변조 방지 하드웨어 키 저장소를 제공하므로이를 사용하는 것이 좋습니다. 또는 Security Smart-MicroSD입니다. 그러면 시드가 추출되지 않고 " 사용 " 만 있습니다. 하지만 비 RSA 하드웨어 TOTP 토큰은 정말 저렴합니다.
  • 관련 : RSA 토큰 작동 방식
  • @sebastiannielsen that 여전히 사회적 참여에 의존하거나 자신의 콘텐츠를 제대로 시청하지 않는 사용자에게 의존합니다. 사용자가 알지 못하는 사이에 사용자의 휴대 전화를 ' 컴퓨터에 연결할 수 있다면 그의 RSA 토큰을 훔쳐서 다른 토큰을 그 자리에 두는 것이 좋습니다 (그리고 그는 이겼습니다 ' 다음에 너무 늦게 사용하려고 할 때까지는 알아 차리지 못합니다.)
  • 연결할 가치가있는 링크 : RSA SecurID 토큰의 숫자는 예측됩니까?

답변

예 말씀하신대로 작동합니다. . 이 칩은 “변조 방지”기능이 있으며 공격을 시도하면 “시드”(비밀 키)를 지 웁니다. 이는 종종 사용자가 교체 할 수없는 배터리와 장치가 열리거나 칩 표면이 제거되면 장치의 전원을 차단하는 “트랩”을 사용하여 수행됩니다. 그런 다음 키는 SRAM에 저장되며 키를 유지하려면 전원이 필요합니다.

키는 현재 시간과 60 초 단계 (실제로는 현재 UNIX 타임 스탬프 / 60)가 결합 된 시드입니다. 코드를 새로 고칩니다.

아니요, 기기가 정확할 필요는 없습니다. 대신 서버는 마지막으로 승인 된 코드의 시간을 저장합니다. 그런 다음 서버는 1 분 앞, 1 분 앞, 현재 시간에 코드를 수락하므로 서버의 현재 시간이 23:20이면 23:19, 23:20 및 23의 코드를 수락합니다. 21.

이후 마지막으로 승인 된 코드의 시간을 저장합니다. 예를 들어 23:21 코드가 승인 된 경우 데이터베이스에 23:21을 저장하고 다음과 같은 코드는 승인을 거부합니다. 23:21 이전에 생성되었습니다.

이제 흥미로운 부분 : 부정확 한 토큰이 서버에서 동기화 해제되는 것을 방지하기 위해 서버는 23 : 19 코드 또는 23:21 코드 23:20 시간. 이렇게하면 다음에 로그온 할 때 서버가 단계 수로 코드를 수정합니다.

23:19 코드를 사용하여 Clock 23:20에 로그인한다고 가정하겠습니다. 서버는 데이터베이스에 “-1″을 저장합니다 (23:21 코드 인 경우 데이터베이스에 “+1″을 저장합니다). 다음에 로그인 할 때 시계는 23:40입니다. 그러면 서버는 23:38, 23:39 또는 23:40 코드를 수락합니다.23:38 코드가 승인되면 “-2″를 데이터베이스에 저장하고 23:39에 “-1″을 데이터베이스에 저장하며 23:40에 “0”을 데이터베이스에 저장합니다.

이렇게하면 서버가 토큰과 동기화 된 상태를 효과적으로 유지할 수 있습니다. 또한 시스템은 토큰이 서버에서 “너무 멀리 떨어져있는”경우 (오랫 동안 사용되지 않아서) 재 동기화를 허용합니다. 이는 시스템 관리자가 수행하거나 토큰 사용자에게 23:20 및 23:21 또는 19:10 및 19:11과 같이 토큰에서 2 개의 후속 코드를 제공하도록 요청되는 셀프 서비스 재 동기화 서비스가 제공됩니다. 서버는 “마지막으로 사용 된 토큰 코드”가 있었던 시간 또는 그 이전에 생성 된 토큰 코드를 절대로 받아들이지 않을 것입니다 (이것은 OTP 코드의 재사용을 허용하기 때문입니다). 재 동기화가 완료되면 토큰은 제공된 2 개의 토큰 코드와의 차이를 저장하고 현재 서버 시간과 재 동기화에서 검색 창은 +/- 50 단계 (약 0,75 시간의 양방향 동기화 해제).

서버는 50 개의 이전 코드와 50 개의 향후 코드를 생성하여 비 동기화 된 토큰을 감지 할 수 있으며 지정된 코드가 일치하면 자동으로 재 동기화 프로세스를 시작합니다. 여러 번 공격자가 재 동기화 프로세스를 사용하여 유효한 코드를 찾는 것을 방지하기 위해 계정이 재 동기화 모드에 있으면 재 동기화없이 로그인이 허용되지 않으므로 공격자는 코드 바로 뒤 또는 이전에 정확한 코드를 찾아야합니다. 찾았습니다.

댓글

  • 멋진 일이지만 '이 사실을 몰랐습니다.

Answer

SecurID 토큰에는 할당 된 “시드”값이 있으며 숫자를 생성하는 특정 알고리즘으로 프로그래밍됩니다. 시드와 시스템 시계를 기반으로합니다. 시드 값은 토큰과 함께 제공되는 파일에도 저장됩니다. 토큰을 받으면 시스템 관리자는 시드 파일을 인증 서버로 가져옵니다. SecurID 토큰 장치와 서버는 모두 시드 값을 갖고 있고 둘 다 알고리즘을 사용하고 있기 때문에 서버는 주어진 시간에 올바른 토큰 코드가 무엇인지 결정할 수 있습니다.

때때로 토큰은 시계가 인증 서버와 동기화되지 않을 수 있습니다.이 경우 시스템 관리자 또는 기타 승인 된 지원 담당자가 서버에서 재 동기화 프로세스를 수행하여 사용자를 지원할 수 있습니다. 그러면 해당 토큰에 대한 시간 오프셋을 인식하도록 서버가 구성됩니다. 따라서 향후 인증 시도가 정확하게 처리되어야합니다.

참고 : 이러한 숫자는 시드 파일, 현재 시간 및 표준 알고리즘에 저장된 데이터만을 기반으로 서버에서 예측할 수 있어야하기 때문에 특수 도구와 토큰에 대한 액세스 권한을 가진 공격자가 예측할 수도 있습니다. (또는 더 나쁜 것은 시드 파일 자체에 대한 액세스입니다. 2011 년에 발생한 것으로 추정 됨 .) 충분한 연속 토큰 코드가 주어지면 시드 값을 결정한 다음 자체적으로 향후 코드를 생성 할 수있는 ols.

답변

Sebastian 대답은 훌륭했습니다. 나는 평신도의 용어로 다시 말할 것입니다. SecureID 토큰은 단순히 시드 값이있는 시계입니다. 시간을 표시하는 대신 숫자를 표시합니다. 그림에서 볼 수있는 점은 초입니다 (제 생각에는), 막대는 숫자가 변경 될 때를 의미하므로 시간을 잴 수 있습니다. 맨 아래에 도달하면 변경 될 예정이며 입력하는 경우 기다리십시오.

” seed “는 장치를 인증하는 서버에도 있습니다. 보안 담당자가 RSA 서버를 설치할 때 암호를 수신 할 서버에 동일한 시드를로드해야합니다.

그래서 … 기본적으로 그것은 우리 아이들이 도라 나 공주와 함께 가지고있는 오래된 LCD 시계와 마찬가지로, 차이점은 숫자에 대한 수학을 제공하는 씨앗입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다