요약

  • 버틀러 램프슨(Butler Lampson)과 공동 저자들은 컴퓨터가 처음 들을 수 있는 주체를 선, 키 또는 네트워크 연결로 보았습니다. 시스템이 그 진술을 사람, 기계, 역할 또는 그룹에 귀속시키려면 “speaks for(대신 말한다)” 연쇄가 먼저 필요했습니다.
  • 인증은 책임 주체를 확립할 뿐 권한을 부여하지 않습니다. 접근은 여전히 요청된 작업, 보호 대상 객체, 적용 규칙, 현재의 위임, 그리고 연쇄가 만료되지 않았다는 근거에 의존합니다.

가드는 채널을 먼저 듣는다

1992년 논문Authentication in Distributed Systems: Theory and Practice의 결정적인 장면에는 얼굴도 신분증도 없습니다. 요청이 가드(guard)에 도착합니다. 그것은 터미널 선, 네트워크 연결, 파이프, 커널 호출 또는 복호화 성공으로 만들어진 채널을 따라 온 것일 수 있습니다. 컴퓨터는 무언가를 받았지만, 그 관찰은 아직 독자들이 흔히 “누가”로 압축하는 질문에 답하지 않습니다.

램프슨, 마르틴 아바디(Martín Abadi), 마이클 버로스(Michael Burrows), 에드워드 워버(Edward Wobber)는 일을 나누었습니다. 인증은 누가 그 진술을 했는지 묻습니다. 인가(authorization)는 누가 그 객체에 대한 작업을 수행할 신뢰를 받는지 묻습니다. 순서가 중요합니다. 가드는 먼저 요청 출처에 대한 방어 가능한 설명이 필요하고, 그다음 객체의 접근 규칙을 해석합니다. 첫 번째 명제에 대한 아무리 훌륭한 증거도 두 번째를 제공할 수 없습니다.

이 구분은 한번 진술된 뒤에는 기초적으로 들리는 차이입니다. 서명된 요청이 마치 서명 검증이 전부인 것처럼 묘사되곤 합니다. 네트워크 주소는 계정인 것처럼, 계정은 키보드 앞에 앉은 사람인 것처럼, 역할 레이블은 자체 임명 기록을 담고 있는 것처럼 다뤄집니다. 이 논문은 그러한 도약 각각을 거부합니다. 기계가 직접 관찰하는 것은 채널이며, 그 채널의 신뢰성은 매우 달라질 수 있습니다.

채널은 사람이 아니어도 말할 수 있다

저자들은 일상적 신원 언어보다 넓게 “주체(principal)”라는 말을 사용했습니다. 사람이 이름 있는 주체일 수 있지만, 기계, 서비스, 역할, 그룹도 그럴 수 있습니다. 선, 암호화 키, 네트워크 주소도 다른 종류의 주체, 즉 진술을 컴퓨터에 직접 전달하는 채널입니다. 사람이나 기계가 위임을 받아 채택한 역할은 복합 주체(compound principal)가 됩니다.

이 어휘는 유용한 범주 오류를 막습니다. 메시지가 어떤 키 아래에서 검증되면, 직접적인 결과는 그 키 채널에 관한 것입니다. 커널이 프로세스를 보고하면, 그 결과는 로컬 운영체제의 채널에 달려 있습니다. 패킷에 출발 주소가 붙어 있으면, 그 주소는 강도를 가정이 아니라 평가해야 하는 네트워크 채널의 증거입니다. 이 관찰들 중 어느 하나가 자동으로 자연인에 대한 주장이 되지는 않습니다.

멀티플렉싱은 취약한 기반을 수리하지 않습니다. 네트워크 연결은 전송 포트를 포함할 수 있고, 프로세스 채널은 원격 프로시저 호출을 포함할 수 있으며, 또 다른 계층이 그 호출을 다시 나눌 수 있습니다. 1992년 논문은 하위 채널이 상위 채널보다 더 신뢰할 수 없다고 말하지 않습니다. 더 많은 레이블이 트래픽을 구분하기 쉽게 만들 수는 있지만, 원래의 귀속을 더 강하게 만들지는 않습니다. 하위 채널은 상위 채널과 신뢰 수준이 같습니다.

“Speaks for”가 빠진 연쇄를 만든다

논문의 중심 관계는 의도적으로 조작적입니다. A가 B를 대신해 말한다면(A speaks for B), A의 진술은 시스템이 B가 그 진술을 한 것처럼 진행할 수 있게 합니다. 따라서 채널은 키를 대신 말할 수 있고, 키는 이름 있는 계정을 대신 말할 수 있으며, 계정은 역할 안에서 말할 수 있고, 그룹 구성원 자격은 그 역할을 접근 규칙에 연결할 수 있습니다. 이 연쇄는 선언된 전제 아래에서 정당화된 책임을 나타냅니다.

이것은 A와 B가 동일한 물리적 실체라고 말하지 않습니다. 의도, 부재, 도덕적 승인을 확립하지도 않습니다. 단기 세션 키는 장기 키가 되지 않으면서 장기 키를 대신 말할 수 있습니다. 현 직무자는 역할을 영원히 소유하지 않으면서 역할을 행사할 수 있습니다. 그룹은 구성원이 오고 감에 따라 변합니다. 이 관계의 가치는 바로 그 간접성을 계속 보이게 하는 데 있습니다.

이 모델은 권한에 한정을 두는 것도 허용합니다. 광범위한 위임만이 가능한 독법은 아닙니다. 주체는 특정 진술 클래스나 특정 자원에 관해서만 다른 주체를 대신 말하도록 허용될 수 있습니다. 명제가 좁을수록 검증자가 안전하게 도출할 수 있는 결론도 작아집니다. 한 파일을 읽기 위해 만들어진 연쇄가 조용히 시스템의 모든 객체를 다시 쓸 권한이 되어서는 안 됩니다.

이름은 발급자에게서 권한을 빌린다

이름은 사람이 읽을 수 있기에 안정적으로 느껴집니다. 시스템은 그 안락함에 기댈 수 없습니다. 1992년 예에서 인증 기관은 공개 키를 이름 있는 주체에 결합하는 진술에 서명합니다. 의존하는 가드는 인증서를 읽어 오고, 기관의 서명을 확인하고, 인계 규칙을 사용해 그 키가 그 이름을 대신 말한다고 결론짓습니다.

저장 데이터베이스는 그 결합을 만들어 낼 것으로 신뢰받을 필요가 없습니다. 기관의 서명을 위조할 수 없기 때문입니다. 그러나 결론은 여전히 올바른 기관 키를 알고 있다는 데, 그리고 그 기관이 이 클래스의 진술을 할 것을 신뢰한다는 데 의존합니다. 데이터베이스는 신뢰받지 않는 저장소일 수 있지만, 발급자가 무관한 것은 아닙니다. 인증서가 휴대 가능하다는 이유만으로 이름이 권한에서 벗어난 것은 아닙니다.

1986년 논문A Global Authentication Service without Global Trust(앤드루 비렐(Andrew Birrell), 램프슨, 로저 니덤(Roger Needham), 마이크 슈로더(Mike Schroeder) 공저)는 이미 명명의 가변성을 명시적으로 다루었습니다. 그 설계는 클라이언트가 이름이 주체에 결합되는 시점을 통제하게 했고, 역할을 “그 인증을 위해 어떤 실체를 신뢰해야 하는지 드러나는” 이름으로 다루었습니다. “글로벌”은 모든 결정이 하나의 전역적으로 신뢰되는 사무처에서 나온다는 뜻이 아니었습니다.

이 때문에 키 롤오버는 외관상의 갱신이 아닙니다. 일반 주체의 키를 바꾸는 데는 새 결합이 필요합니다. 기관의 키를 바꾸는 것은 더 어렵습니다. 클라이언트가 새 신뢰 앵커를 학습하는 동안 이전 인증서와 새 인증서가 공존해야 할 수 있습니다. 그 전환은 인증 이벤트의 일부이지, 그 밖의 잡무가 아닙니다.

위임은 더 정확한 행위자를 만든다

위임은 흔히 사람이 신원을 빌려주는 일로 서술됩니다. 이 논문은 더 위험하지 않은 형태를 제시합니다. 논문의 복합 주체 “B for A”는 A를 대신해 행동하는 B를 뜻합니다. 저자들의 구성에서 A가 위임하고 B가 명시적으로 수락합니다. 두 행위 모두 결과 주체에 기여합니다. 그 주체는 어느 이름 하나보다 더 정확합니다.

시간이 이 부여를 제약합니다. 단기 위임 증거는 갱신되어야 합니다. 로그아웃 시 워크스테이션은 자격 증명을 갱신하는 데 필요한 임시 키를 잊어버릴 수 있으며, 위임이 만료된 뒤 사용자를 대신해 계속 행동하는 것을 막습니다. 장기 실행 작업은 더 어렵습니다. 편의는 연속성을 요구하고 통제는 유계 권한을 요구하기 때문입니다. 이 논문은 그 균형이 사라진 것처럼 가장하지 않고 솔직하게 까다롭다고 말합니다.

같은 정직함이 폐지에도 적용됩니다. 캐시된 증거는 빈번한 인증을 빠르게 만들지만, 유출된 키나 바뀐 구성원 자격이 캐시 안에서 무기한 살아 있어서는 안 됩니다. 묘사된 시스템은 수명(lifetime)과 갱신을 사용합니다. 더 짧은 수명은 낡은 권한의 창을 좁히지만 가용한 출처에 대한 의존을 늘립니다. 매우 보안이 강한 출처와 매우 가용성이 높은 출처를 함께 요구함으로써 트레이드오프를 폐지하지 않고 신뢰를 분산할 수 있습니다.

권한은 여전히 객체에 속한다

채널이 주체에 연결된 뒤에야 가드는 인가에 도달합니다. 접근 통제 목록(ACL)은 보호 대상 객체에 속합니다. ACL은 주체와 권리를 명시하고, 요청은 작업을 명시합니다. 요청 주체가 필요한 권리를 가진 항목을 대신 말한다는 것을 보일 때만 접근이 허용됩니다.

이 마지막 결합은 세 가지 흔한 치환을 막습니다. 인증은 인가가 아닙니다. 그룹 구성원 자격은 보편적 권한이 아닙니다. 하나의 역할이나 자원에 대해 유효한 위임이 다른 곳에서의 권한 증명은 아닙니다. 가드는 그 결정에 실제로 사용된 객체, 작업, 접근 규칙 버전, 전제를 필요로 합니다.

저자들은 증명을 생성하는 것과 검증하는 것도 구분합니다. 자격 증명과 그룹 기록은 원격 출처에서 수집해야 할 수 있지만, 작은 신뢰 컴포넌트가 그것이 요청된 접근을 정당화하는지 확인할 수 있습니다. 증거가 없거나 신뢰할 수 없을 때 설계는 안전하게 실패하는 것을 지향합니다. 정당한 요청이 거부될 수 있지만, 의심이 허위 부여를 만들어서는 안 됩니다. 그 안전 선택은 운영상으로는 장애처럼 보일 수 있습니다. 그래서 거부 사유가 중요합니다.

감사 기록은 답이 아니라 연쇄다

“허용” 이벤트가 간결한 것은 작업을 숨기기 때문입니다. 어떤 키가 수락되었고, 어떤 발급자가 신뢰되었고, 어떤 이름이 해석되었고, 어떤 그룹이나 역할이 적용되었고, 어떤 위임이 살아 있었고, 어떤 ACL이 권리를 담고 있었습니다. 시스템이 최종 답만 저장하면, 나중에 검토하는 사람은 전제 없는 판결을 물려받습니다.

1992년 논문은 더 강한 영수증을 제안합니다. 각 접근 결정에는 채널 진술, 참조 모니터 가정, 작은 추론 규칙 집합으로 만들어진 형식적 증명이 있습니다. 그 증명은 감사 추적에 기록될 수 있으며, 중간 결과는 보조명제(lemma)로 재사용될 수 있습니다. 기록은 무엇이 허용되었고 왜 허용되었는지 설명할 수 있습니다.

증명은 사후에 자신의 가정을 참으로 만들 수 없습니다. 유출된 채널이나 잘못된 신뢰 루트에 기반한 증명은 나쁜 전제의 충실한 증명으로 남습니다. 지속적인 기여는 완벽한 신원에 대한 약속이 아닙니다. 컴퓨터가 들은 것과 그것이 궁극적으로 허용한 권한 사이의 단계를 건너뛰기를 거부하는 방법입니다.

출처