계정 번호라는 레이블이 붙은 필드는 자동으로 공개 참조가 아니며, 레이블이 시험이 아닙니다. 시험은 소유가 무엇을 허용하는가입니다. 번호를 아는 것만으로 누군가 로그인하거나 연결 프로필이 내려오거나 기기가 승인된다면, 그 번호는 수명 주기가 있는 자격 증명입니다. 서비스가 숫자 식별자를 발급하고 무해하다고 부를 때마다 저는 아래 다섯 가지 점검을 수행합니다. 각각은 짧은 기록에 한 줄을 만들고, 그 기록이 산출물이며 제품에 대한 평결이 아닙니다.

소유가 실제로 부여하는 것을 목록화하십시오

번호가 여는 각 행동을 따로 적으십시오. 포털 로그인, 구성 파일 가져오기, 새 기기 승인, 승인된 터널 로그인 제공은 서로 다른 권한이며, 서비스는 하나를 다른 것 없이 구현할 수 있습니다. 번호를 유일한 필드로 받아들이는 포털은 터널이 피어를 어떻게 인증하는지 나중에, 또는 트래픽 키가 어떻게 도출되는지에 대해 아무것도 말하지 않습니다.

일반 모델은 간단합니다. bearer 자격 증명은 보유자가 별도의 암호화 키 소유를 증명하지 않고 사용할 수 있는 것이며, 그것이 RFC 6750 이 토큰에 대해 긋는 구분입니다. 이것은 비교이지, 번호 기반 서비스가 OAuth를 구현한다는 주장이 아닙니다. 보유자가 다른 것을 필요로 하지 않는다면 번호를 bearer 비밀로 취급하고 나머지 설계를 그에 맞게 분류하십시오.

참조가 아니라 비밀로 보호하십시오

저장은 분류에서 따릅니다. 로그인시키는 값은 암호 관리자에 속하며, 스크린샷, 클립보드 기록, 채팅 메시지, 브라우저 메모에 속하지 않습니다. 스크린샷은 흔한 유출입니다. 번호는 짧고 무해해 보이므로, 그것이 나온 기기보다 오래 살아남는 지원 스레드에 남습니다.

피싱은 또 다른 실패 모드이며, 번호가 얼마나 무작위인지는 상관하지 않습니다. 값을 원하는 사기꾼은 양식에 붙여 넣으라고 요구할 것이고, 절대 만료되지 않고 두 번째 요소가 없는 자격 증명은 노력할 가치가 있습니다. 로그인 경로는 북마크나 알려진 주소로 도달하고, 번호도 요구하는 메시지의 링크로는 도달하지 마십시오.

복구 자료를 비밀의 일부로 취급하십시오. 운영자가 복구 코드, PIN, 또는 계정을 재설정할 수 있는 이메일 주소도 발급했다면, 그것들은 같은 보호 요구 사항을 가진 별도의 자격 증명입니다. 보호되지 않은 재설정 경로 하나가 다른 모든 통제를 장식으로 만듭니다.

추측 저항과 속도 제한을 함께 확인하십시오

길이는 생성 방법 옆에서만 의미가 있습니다. 예측 가능한 수열에서 만들어진 긴 번호는 암호 생성기에서 나온 짧은 값보다 약하며, 인상적인 자릿수는 예측 불가능성을 증명하지 않습니다. 추측하기 얼마나 어려운지 논하기 전에 값이 어떻게 생성되는지 물으십시오.

추측 저항만으로는 무제한 시도 속도도 견디지 못합니다. 중요한 통제는 운영자가 구현하는 것입니다. 실패 횟수 카운터, 잠금, 출처별 제한, 그리고 잘못된 번호가 존재하지 않는 번호와 구별되는지 여부입니다. 서비스가 지원한다면 한 번의 실패로 오류의 모양과 재시도 카운터의 등장 여부를 알 수 있습니다.

# one attempt, then read the response and any counter or delay
# do not script repeated guesses against a live account
curl -i -X POST https://portal.example.invalid/login -d "account=000000000000"

응답이 무엇을 드러내는지 기록하십시오. 알 수 없는 계정에 대한 별도 오류는 번호를 추측할 수 없더라도 열거 오라클이며, 그 발견은 클라이언트 측에서 고칠 수 있든 없든 기록에 속합니다.

필요해지기 전에 교체와 폐기를 계획하십시오

분실되거나 노출된 번호에 대해 지원되는 절차를 찾아 모든 것이 작동할 때 적어 두십시오. 계정 자격 증명을 아예 교체할 수 있습니까? 교체가 이미 등록된 기기, 활성 세션, 다운로드한 구성을 무효화합니까? 절차는 어떤 복구 자료를 요구합니까? 이메일 의존이 없는 서비스는 사용자에게 더 많은 복구 책임을 넘길 수 있으며, 이는 절차를 덜이 아니라 더 중요하게 만듭니다.

계정 교체와 자격 증명 폐기를 분리하십시오. 번호가 키, 인증서, 프로필 다운로드를 승인한다면, 번호를 교체해도 그 다운로드된 자료는 유효할 수 있고, 다운로드된 자료의 폐기는 다른 소유자의 다른 작업일 수 있습니다. 변경된 필드 하나가 모든 연결을 끝낸다고 가정하지 마십시오. 운영자의 실제 모델을 확인하고 어디서 검증했는지 기록하십시오.

결정을 문서화하고 나중에 다시 확인하십시오

서비스마다 한 페이지 기록을 유지하십시오. 번호가 부여하는 권한, 저장 위치, 재설정할 수 있는 사람, 사용 증거, 공개 후 첫 한 시간에 무엇을 할지. 그 기록이 용어에 대한 논쟁을 누군가 감사할 수 있는 결정으로 바꿉니다.

프라이버시 주장에는 자체 범위가 필요합니다. 무작위로 생성된 번호도 시간에 걸쳐 계정 사건을 연결하는 안정적인 식별자가 될 수 있습니다. 예측 불가능성은 비연결성이 아니며, 어느 속성도 보존된 네트워크 메타데이터에 대해 아무것도 말하지 않습니다. 로그인 화면의 필드를 세는 대신 완전한 설계를 비교하십시오.

기록하기 전에:

  • 번호가 부여하는 모든 권한이 다운로드와 기기 승인을 포함해 나열되어 있다.
  • 저장 및 복구 경로가 번호 자체와 같은 기준으로 보호된다.
  • 생성 방법과 속도 제한이 알려져 있으며 길이에서 가정되지 않는다.
  • 교체 절차와 폐기 절차가 있고 어느 것이 어느 것을 무효화하는지 안다.
  • 기록이 누가 값을 재설정할 수 있는지, 사용 후 어떤 증거가 남는지 밝힌다.

관련 글