검증 방식
브라우저에서 확인합니다.
엔클레이브로 봉인합니다.
브라우저가 확인하는 것, 릴레이가 보는 것, 그리고 여전히 Undergrove를 믿어야 하는 부분입니다.
아직 독립 평가 전
엔클레이브를 먼저 확인
내 탭에서 봉인
릴레이는 바이트만 봄
답변마다 영수증
누가 볼 수 있고, 무엇이 막는가.
네트워크
잔여 위험: 낮음- 얻는 것
- 봉인된 바이트, 크기, 시각
- 막는 것
- HTTPS, 그리고 엔클레이브로의 봉인
- 남은 위험
- 트래픽의 크기와 타이밍
릴레이
잔여 위험: 보통- 얻는 것
- 계정, IP, 크기, 모델
- 막는 것
- 탭에서 봉인됨, 릴레이는 열 수 없음
- 남은 위험
- 릴레이가 보는 메타데이터
클라우드 호스트
잔여 위험: 보통- 얻는 것
- 암호화된 엔클레이브 메모리
- 막는 것
- AMD SEV-SNP 또는 Intel TDX, 증명됨
- 남은 위험
- 하드웨어 결함, Tinfoil 자체의 설명
가짜 엔클레이브
잔여 위험: 낮음- 얻는 것
- 아무것도 없음: 탭이 거부함
- 막는 것
- 브라우저에서 확인하는 증명
- 남은 위험
- 검증된 코드가 검토된 코드는 아님
변경된 사이트 코드
잔여 위험: 보통- 얻는 것
- 봉인 전에 입력한 내용
- 막는 것
- 빌드 매니페스트, 서명, 직접 빌드
- 남은 위험
- 페이지는 스스로를 완전히 보증할 수 없음
개발자 API
잔여 위험: 높음- 얻는 것
- 메모리 속 요청
- 막는 것
- 저장도 로그도 없음, Undergrove 정책
- 남은 위험
- 게이트웨이를 믿어야 함
서버 한 대의 내부
엔클레이브가 시작되고 끝나는 곳.
스크롤해서 GPU 서버를 분해해 보세요. 엔클레이브 경계 안에 있는 것과 밖에 남는 것을 볼 수 있습니다.
- 히트 스프레더GPU 칩을 덮고 있는 금속 덮개입니다.
- GPU 다이모델이 실행되는 곳입니다. Tinfoil의 문서에 따르면 Tinfoil의 NVIDIA GPU(H100, H200, B200)는 기밀 컴퓨팅 모드로 작동합니다.
- 고대역폭 메모리모델의 가중치와, 답변이 생성되는 동안의 요청을 담고 있습니다.
- 기밀 가상 머신서버의 프로세서(AMD SEV-SNP 또는 Intel TDX)에서 Tinfoil의 라우터와 모델 서버가 호스트가 읽을 수 없는 메모리 안에서 실행됩니다. 이 칩이 브라우저가 확인하는 보고서에 서명합니다.
- 엔클레이브 경계하드웨어가 호스트의 접근을 막는 범위이자, 증명이 설명하는 범위입니다. 요청은 이 안에서만 열립니다.
- 호스트보드, 그 하이퍼바이저와 드라이버, 그리고 이를 운영하는 사람은 경계 밖에 있습니다. 호스트는 봉인된 바이트를 들여보내고 내보내기만 합니다.
Tinfoil이 운영하는 종류의 머신을 그린 그림이며, 특정 머신의 사진이 아닙니다. Tinfoil의 서명된 릴리스 기록에는 각 엔클레이브의 CPU, 메모리, GPU가 명시되어 있으며, 워크스페이스의 검증됨 패널에서 확인할 수 있습니다.
전문 읽기전문 숨기기
요약
Undergrove는 Tinfoil이 운영하는 하드웨어 엔클레이브 안에서 오픈 웨이트 모델을 실행합니다. 이것이 의미하는 바 중 일부는 브라우저가 직접 확인하고, 일부는 Tinfoil이 밝힌 내용이며, 일부는 Undergrove에 달려 있습니다. 각각을 구분하면 다음과 같습니다.
브라우저가 확인하는 것
- 엔클레이브가 Tinfoil이 공개한 코드를 실행하는 진짜 하드웨어라는 것.
- 각 요청이 탭을 떠나기 전에 그 엔클레이브의 키로 봉인된다는 것.
- 각 답변의 영수증을 위해, 하드웨어가 지원하는 경우 답변한 모델의 엔클레이브.
Tinfoil이 밝힌 내용
- Tinfoil은 자사 엔클레이브에 접근할 수 없으며, 엔클레이브 안의 어떤 것도 재시작 후에 남지 않는다는 것.
- 지원하는 GPU가 기밀 컴퓨팅 모드로 실행된다는 것.
Undergrove를 신뢰해야 하는 부분
- 이 사이트가 브라우저에 보내는 코드. 빌드와 비교할 수 있습니다.
- 릴레이가 볼 수 있는 것(크기, 시간, 계정)을 어떻게 다루는지.
- 요청을 메모리에서 읽는 개발자 API의 게이트웨이.
이 중 어느 것도 아직 독립적인 평가를 받지 않았습니다.
01 · 증명
칩이 코드를 보증합니다.
하드웨어 엔클레이브는 서버에서 그 서버의 호스트조차 들여다볼 수 없는 부분입니다. 프로세서가 엔클레이브의 메모리를 암호화하고 호스트의 소프트웨어가 접근하지 못하게 합니다. 이것만으로는 약속에 불과합니다. 이를 확인할 수 있게 만드는 것이 증명입니다. 엔클레이브가 시작되면 프로세서는 불러온 코드를 측정하고, 칩 제조사가 보증하는 키로 그 측정값에 대한 보고서에 서명합니다. 보고서에는 엔클레이브가 복호화에 사용할 공개 키도 명시됩니다.
첫 메시지를 보내기 전에, 워크스페이스는 Tinfoil 라우터 엔클레이브의 보고서를 Undergrove 서버를 통해 가져와 브라우저에서 Tinfoil의 오픈 소스 검증 도구로 확인합니다. Undergrove를 거쳐 가져와도 달라지는 것은 없습니다. Undergrove는 칩의 서명을 위조할 수 없으며, 검증되지 않는 보고서가 나오면 모든 것이 중단됩니다.
일치하면: 요청은 보고서가 명시한 키로 봉인됩니다.
하나라도 실패하면: 아무것도 전송되지 않으며, 워크스페이스가 이유를 알려 줍니다.
검증 도구의 확인 순서
- Tinfoil이 이 코드에 대해 게시한 릴리스를 찾습니다.
- 엔클레이브의 하드웨어 증명 보고서를 칩 제조사의 서명 키로 확인합니다.
- 릴리스의 서명된 빌드 기록(GitHub에서 발급된 Sigstore 기록)을 확인합니다.
- 비교: 엔클레이브에서 측정된 코드는 정확히 그 릴리스여야 합니다.
- 암호화 키가 엔클레이브의 증명에 명시된 키인지 확인합니다.
검증된 보고서는 이 탭이나 이 사이트의 다른 탭에서 최대 10분간 재사용되며, SHA-256으로 확인한 완전히 같은 보고서일 때만 재사용됩니다. 워크스페이스는 각 확인을 “검증됨” 아래에 보여 주며, 아키텍처 페이지에서 이를 실행하는 코드를 볼 수 있습니다.
02 · 봉인
엔클레이브만 열 수 있습니다.
엔클레이브가 검증되면, 모든 실시간 요청은 떠나기 전에 탭에서 봉인됩니다. 요청 본문은 Tinfoil의 HTTP 본문 암호화 프로토콜인 EHBP로, 증명에 명시된 키에 맞춰 암호화됩니다. EHBP는 상대방의 공개 키로 암호화하는 표준인 HPKE를 사용합니다. 탭은 요청마다 새 키 쌍을 만들고, 이를 엔클레이브의 키와 결합해 공유 비밀을 만든 다음 AES-256-GCM으로 암호화합니다.
새 키 쌍의 공개 키 절반은 캡슐화된 키로서 암호문과 함께 전송됩니다. 이를 다시 비밀로 바꿀 수 있는 것은 엔클레이브 밖으로 나가지 않는 엔클레이브의 개인 키뿐입니다. 답변도 같은 방식으로, 봉인된 프레임에 담겨 돌아오며 탭이 스트리밍되는 대로 엽니다.
03 · 릴레이
읽을 수 없는 바이트.
봉인된 요청은 Tinfoil로 바로 가지 않고 Vercel의 함수인 Undergrove의 릴레이로 갑니다. 릴레이는 누가 요청하는지, 사용 한도 안에 있는지 확인하고, 요청에 Undergrove의 Tinfoil 키를 붙이므로 Tinfoil 계정이 따로 필요하지 않습니다. Tinfoil 자체 호스트로 향하지 않거나 캡슐화된 키가 없는 요청은 거부합니다.
릴레이는 입력한 단어를 셀 수 없으므로, 암호문의 크기로 각 요청의 비용을 넉넉하게 추정합니다. 사본은 보관하지 않으며, 로그에는 경로 이름, 상태 코드, 소요 시간만 남습니다.
바깥쪽: 릴레이가 보는 것
- 내 계정과 IP 주소(호스팅 업체인 Vercel을 통해)
- 각 요청의 크기, 시각, 경로
- 어떤 모델이 답변했는지(Tinfoil이 설정하는 헤더를 통해)
- 웹 검색이나 이미지를 사용했는지 여부(요금 청구를 위해 브라우저가 알리는 대로)
안쪽에 봉인됨: 릴레이가 읽을 수 없는 것
- 내 메시지와 파일
- 답변
- 내 지침과 메모리 노트
04 · 영수증
두 개의 엔클레이브, 그리고 답변마다 영수증.
브라우저가 검증한 라우터 엔클레이브는 모델을 실행하지 않습니다. 라우터는 요청을 열어 모델이 GPU와 함께 실행되는 엔클레이브로 전달합니다. 라우터는 공개된 코드에 따라 그 엔클레이브를 직접 검증하고, 응답 헤더에 이름을 명시합니다.
그런 다음 브라우저는 같은 검증 도구로, Tinfoil의 라우터가 해당 모델에 고정해 둔 저장소를 기준으로 명시된 엔클레이브도 확인합니다. 확인 결과는 영수증으로 답변과 함께 보관됩니다. 엔클레이브, 그 안에서 측정된 코드, 일치한 릴리스, 요청을 봉인한 키가 담깁니다. 영수증은 브라우저 자체의 기록이며 Undergrove나 Tinfoil이 서명한 것이 아닙니다. 그 바탕이 되는 증명은 AMD와 GitHub가 서명하므로 누구나 다시 확인할 수 있습니다.
- 검증됨
- Tinfoil의 라우터가 해당 모델에 고정해 둔 저장소의 게시된 릴리스를 실행하는 정품 하드웨어입니다.
- 확인되지 않음
- 브라우저 검증 도구가 아직 읽지 못하는 하드웨어입니다. 이 도구는 AMD SEV-SNP 보고서를 읽으므로, Intel TDX 기반 엔클레이브는 확인되지 않음으로 기록됩니다.
- 미확정
- 확인은 실행되었지만 한 단계가 실패했습니다. 예를 들어 엔클레이브가 Tinfoil의 서비스가 짝지어 둔 릴리스보다 더 새로운 릴리스를 이미 실행 중인 경우입니다.
05 · 개발자 API
다른 경로, 있는 그대로 설명합니다.
개발자 API를 호출하는 코드는 요청을 HTTPS로 Undergrove의 게이트웨이에 보내며, 게이트웨이는 요청을 확인하고 한도를 적용하고 도구를 실행하기 위해 요청을 읽습니다. 요청은 메모리에서만 읽으며 저장하거나 로그에 남기지 않습니다. 그런 다음 게이트웨이는 워크스페이스에서 브라우저가 하는 일을 똑같이 합니다. Tinfoil의 SDK로 엔클레이브를 검증하고 요청을 그 엔클레이브로 봉인합니다.
따라서 이 경로에서는 게이트웨이가 요청을 갖고 있는 동안 Undergrove를 신뢰해야 합니다. 그래도 엔클레이브는 확인할 수 있습니다. Tinfoil 경로에서 오는 각 답변에는 게이트웨이가 검증한 증명 번들을 명시하는 헤더가 있어 다시 검증할 수 있습니다. 방법은 개발자 문서에 있습니다.
GET /v1/attestation?sha256=으로 받아 직접 다시 확인할 수 있습니다.06 · 이 페이지
확인하는 코드를 확인합니다.
위의 모든 과정은 이 사이트가 브라우저에 보내는 코드에서 실행되므로, 그 코드도 중요합니다. 빌드할 때마다 매니페스트가 작성됩니다. 사이트가 제공하는 모든 파일의 SHA-256과 빌드 원본 커밋이 담깁니다.
페이지는 스스로를 완전히 보증할 수 없습니다. 페이지 안에서 실행되는 확인은 그 페이지만큼만 정직합니다. 더 강력한 확인에는 Undergrove가 전혀 관여하지 않습니다. 고정된 환경에서 직접 커밋을 다시 빌드하고 매니페스트를 비교하세요.
npm run rebuild:site) 바이트 단위까지 같은 매니페스트가 나와야 합니다. 누구나 우리에게 묻지 않고 직접 실행해 비교할 수 있습니다.07 · 한계
이것으로 증명되지 않는 것.
- Tinfoil이 밝힌 내용은 Tinfoil의 주장입니다. Tinfoil이 자사 엔클레이브에 접근할 수 없다는 것, 엔클레이브 안의 어떤 것도 재시작 후에 남지 않는다는 것, GPU가 기밀 컴퓨팅 모드로 실행된다는 것은 Tinfoil이 밝힌 내용입니다. 브라우저가 확인하는 것은 하드웨어가 진짜이며 공개된 코드를 실행한다는 것입니다.
- 하드웨어도 신뢰해야 하는 대상입니다. 보호 수준은 프로세서, 그 펌웨어, 칩 제조사의 키에 달려 있으며, 하드웨어 엔클레이브에는 과거에도 공개된 취약점이 있었습니다.
- 한 구간은 공개된 코드에 의존합니다. 요청이 라우터에서 모델의 엔클레이브로 전달되었다는 것은 라우터의 공개된 코드에 의존합니다. 브라우저는 AMD SEV-SNP에서만 모델의 엔클레이브를 확인할 수 있으며, Intel TDX에서는 확인되지 않음으로 기록됩니다.
- 릴레이는 바깥을 봅니다. 계정, IP 주소, 크기, 시간, 어떤 모델이 답변했는지.
- 공개되었다고 검토된 것은 아닙니다. 검증 도구는 어떤 코드가 실행되는지 보여 줄 뿐, 그 코드에 결함이 없다는 것을 보여 주지는 않습니다.
- 아직 독립적인 평가는 없습니다. 지금까지 이 설계나 코드를 검토한 감사인은 없습니다.
관찰자별로 누가 무엇을 볼 수 있는지는 위협 모델을 읽어 보세요.
08 · 더 알아보기