방법론
점수는 이 사이트가 파는 상품 그 자체이므로, 모델은 설명되는 대신 공개된다: 이 페이지는 채점 엔진이 읽는 것과 같은 파일인 methodology.json에서 그려진다. 방법론은 수치에서 벗어날 수 없다. 사본이 단 하나뿐이기 때문이다.
어느 점수도 서비스 클래스 없이는 표시되지 않는다 — 실제로 궁금한 질문에 둘 중 어느 것이 답하는지를 알려주는 것이 바로 클래스이기 때문이다.
순위는 저장된 값이 아니다. 이는 목록의 속성이다: 각 랭킹 페이지는 두 점수에서 프로바이더를 정렬하고 어느 축으로 정렬했는지를 밝힌다. 프라이버시 랭킹은 보안을 우선하고, 스트리밍 랭킹은 사용성을 우선한다. 우선 축이 동점이면 다른 점수로, 그마저 동점이면 이름으로 넘어간다 — 그래서 순서는 항상 유일하게 정해지며, 같은 숫자를 지닌 두 행은 존재하지 않는다. 누군가 움직일 수 있는 순위 필드는 없다.
여덟 개의 독립된 위험 채널이 각각 공개 레코드에 하나의 질문을 던진다. 각 채널은 0과 1 사이의 확률로 답한다 — 이 특정 경로가 이용자를 특정할 가능성이 얼마나 되는지 — 그리고 여덟 개는 더해지는 대신 곱해진다.
어떤 채널도 중요하게 느껴진다는 이유로 가중치를 받지 않는다. 가중치는 각 채널이 발견하는 내용 안에 있으며, 아무것도 발견하지 못하면 점수는 그대로 둔다.
각 채널은 자신이 읽는 필드를 명시하며, 각 프로바이더 페이지는 그것이 실제로 읽은 값을 출처 및 날짜와 함께 보여준다. 아래 숫자는 각각이 67개 보안 필드 중 몇 개를 반영하는지를 나타낸다. 하나 이상의 질문에 답하는 필드는 각각의 아래에서 계산되므로 합계는 67를 넘는다.
| 채널 | 던지는 질문 | 필드 |
|---|---|---|
| 보존 | 트래픽을 사람과 연결하는 레코드가 존재하며, 누가 확인했는가? | 13 |
| 관할권 | 프로바이더가 발언권을 갖지 못한 채 존재하는 것을 강제할 수 있는가? | 5 |
| 공개 | 무언가를 이미 넘긴 적이 있는가? | 6 |
| 무결성 | 한 가지를 말하고 다른 일을 하는 것이 적발된 적이 있는가? | 17 |
| 아키텍처 | 출구를 운영하는 주체는 누구이며, 트래픽에 어떤 처리를 하는가? | 2 |
| 위생 | 지나가며 수집되는 식별 정보는 무엇이며, 클라이언트를 전혀 확인할 수 있는가? | 12 |
| 무지 | 이 중 아무도 확인하지 않은 부분은 얼마나 되는가? | 6 |
| 침묵 | 10년, 수백만 명의 사용자, 그리고 레코드에는 아무것도 없다고? | 5 |
채널은 필드를 읽어 곧바로 숫자를 내놓지 않는다. 그 사이에는 모델의 규칙이 있다: 32개이며, 각각 무엇을 읽는지, 어느 채널에 응답하는지, 어떤 형태의 연산을 쓰는지를 명시한다. 독자가 볼 수 없는 규칙은 독자가 믿을 수밖에 없는 규칙이 되므로 여기에 전문을 싣는다.
열 가지 유형이 이를 모두 포괄하며, 그 유형이 곧 규칙이 할 수 있는 일에 대한 정직한 요약이다:
capped_sum
가산항은 넘을 수 없는 상한을 향해 누적된다.
constraint
표가 충족해야 하는 불변식이다. 어떤 것도 가격 산정하지 않으며 프로바이더별로 평가하는 대신 selftest.py가 확인한다.
decay
그 배후 근거의 경과 기간에 따라 조정된 값이다.
derivation
다른 필드에서 하나의 필드를 계산하므로, 사실은 한 번만 저장된다.
flag
독자를 위한 표식을 공개하며 점수는 변동시키지 않는다.
gate
숫자를 계산하는 대신 모델의 어느 분기를 적용할지 선택한다.
max
하나의 상황을 여러 방식으로 코딩한 것 중 최악이다. 서로 누적되지 않는다. 한 사건을 두 번 기록해도 여전히 하나의 사건이다.
noisy_or
독립적인 발견은 결합된다: 1 - product(1 - 각각).
product
요인들은 서로가 확인한 것을 각각 확장하면서 곱해진다.
threshold
구간을 결정하거나 규칙이 적용되는지를 결정하는 입력값에 대한 테스트.
32개 전부가 무언가에 값을 매기는 것은 아니다. 4개는 constraint 유형이며, 그중 3개 — R08, R22, R23 — 는 어떤 프로바이더에 대해서도 평가되지 않는다: 이들은 표 자체가 만족해야 하는 불변 조건으로, 레코드가 채점될 때가 아니라 계약이 구성될 때 확인된다. 그래서 필드 수 대신 범위를 명시한다.
네 번째인 R29는 레코드를 읽긴 하지만, 코딩 비용이 아니라 필드를 어떻게 코드화할 수 있는지를 결정하기 위해서다. 또 다른 하나인 R15는 flag 유형으로, 독자를 위한 표시만 공개할 뿐 숫자는 전혀 움직이지 않는다.
R01_bought_coverage무결성max4개 필드 읽음
비용을 지불했기 때문에 존재하는 커버리지
params.bought_coverage로 가격이 산정된 (X08, X10) 쌍과 — M10에 review_directory가 나열된 경우 — params.review_directory로 가격이 산정된 X11 중 최댓값; 어느 경로도 작동하지 않으면 0.000
R02_cluster_contagion무결성product4개 필드 읽음
거짓말하다 적발된 자매 프로바이더로부터 유입된 위험
min(params.cap, coupling x transfer x 형제 레코드 s의 R04_lie_group(s) 최댓값); coupling은 M18_shared_infrastructure에서 읽은 params.coupling이며, 인프라가 별개이거나 불명이거나 표에 아무것도 명시하지 않은 경우 M17_brand_role을 대신 사용; transfer: 판정 날짜가 양쪽의 M16 최댓값 이상이면 1.0, 그렇지 않으면 0.0; 날짜가 없는 판정 -> 0.0; 형제는 공개된 레코드여야 하며, 형제 자체의 전염성은 읽지 않음
R03_owner_business무결성max1개 필드 읽음
그룹이 판매하는 다른 상품이 시사하는 수익화
M10 카테고리별 최댓값; X05와는 noisy-OR가 아니라 최댓값으로 결합 (하나의 상황, 두 가지 코딩)
R04_lie_group무결성max2개 필드 읽음
거짓말 축
max(X01, X02) — noisy-OR는 사용하지 않음: 두 번 코딩된 하나의 사건이 CHANNEL_CAP까지 중복 합산되어서는 안 됨; S19 = 0보다 크면 caught_lying, 둘 다 불명이면 unexamined, 그 외에는 clean
R05_exposure침묵threshold3개 필드 읽음
노출 구간
pts = params.years_points로 점수를 매긴 운영 연수 + params.scale_points로 점수를 매긴 M08 + P04=stayed_logging일 때 params.stayed_logging_points; 구간은 총점이 도달한 params.bands의 가장 높은 임계값이며, 그렇지 않으면 낮음; 직접 작성된 P10은 무시
R06_ignorance무지product5개 필드 읽음
아무도 확인하지 않은 것의 가격
min(params.cap, params.slope x (1 - known_share)) x (1 - params.posture_relief x posture); posture = posture 항목의 합계이며 1.0으로 제한
R07_silence침묵
구간은 옆에 저장되는 것이 아니라 공표된 점수에서 읽힌다 — 그래서 말과 숫자가 어긋날 수 없다.
| 구간 | 점수 | 의미하는 바 |
|---|---|---|
| 보호 수준: 높음 | 75–100 | 프로바이더의 핵심 프라이버시 주장이 근거로 뒷받침되며, 독립 감사가 이를 확인했다. |
| 보호 수준: 중간 | 55–74 | 중요한 부분의 대부분이 확인되었고 기록상 프로바이더를 배제할 요인은 없지만, 일부 공백이 남아 있다. |
| 보호 수준: 평균 이하 | 35–54 | 확인된 것보다 확인되지 않은 것이 많다. 추문은 없지만 추천하기엔 부족하다. |
| 보호 수준: 낮음 | 15–34 | 알려진 내용 대부분이 프로바이더에게 불리하게 작용하거나, 거의 아무것도 확인할 수 없다. |
| 비추천 | 0–14 | 배제됨: 프로바이더가 자사 행위에 대해 거짓을 말한 것이 확인되었거나, 그 앱이 다른 이용자의 트래픽을 이용자 기기를 통해 흘려보낸다. |
보안은 관문이지 거래 가능한 양이 아니다. 전체 랭킹에서는 사용성 점수가 높아도 보안 점수가 더 나은 프로바이더보다 위로 올라갈 수 없다. 목록은 우선 보안으로 정렬하며, 보안이 완전히 동점일 때만 사용성에 의존한다.
현재 레지스터에서 사용성 60를 받은 프로바이더는 55를 받은 프로바이더보다 25단계 아래에 위치한다 — 이는 버그가 아니라 올바른 순서다.
모델이 채점하는 것은 공개된 근거의 상태이지, 회사에 대한 우리의 의견이 아니다. 그래서 값 자체만큼 중요한 세 가지가 있다.
모든 값은 출처를 지니며, 각 출처는 하나의 단계를 지닌다. 가중치는 모델 자체가 정한다:
| 단계 | 가중치 | 내용 |
|---|---|---|
| A | 1.00 | 문서 그 자체 — 정책, 보고서, 법원 기록 |
| B | 0.85 | 프로바이더가 책임을 지는 자리에서 직접 밝힌 것 |
| C | 0.70 | 유능한 제3자의 보도 |
| D | 0.35 | 그보다 근거가 얕은 모든 것 |
별도로, 각 값은 어떻게 그 자리에 있게 되었는지를 기록한다. document는 인용 가능한 출처가 존재함을 뜻하며, 오직 이것만이 근거가 있는 주장으로 표시될 수 있다. derived는 이 페이지의 규칙에 의해 다른 필드로부터 계산된 것이다. asserted는 뒷받침하는 것이 전혀 없는 값이며, 아무도 확인하지 않은 필드가 이렇게 기록된다.
네 번째 등급은 없다: 값은 문서에 근거하거나, 문서에 근거한 값에서 계산되었거나, 아무런 근거가 없는 것 중 하나다.
세 곡선을 숫자로:
| 낡아가는 것 | 온전한 값으로 유지되는 기간 | 절반이 되는 주기 | 이 아래로는 내려가지 않음 |
|---|---|---|---|
| 감사 또는 점검 | 12개월 | 18개월 | 5% |
| 지속 중인 관행에 대한 주장 | 12개월 | 60개월 | 15% |
| 투명성 관련 수치 | 12개월 | 60개월 | 35% |
세 곡선이 다른 이유는 각자가 묘사하는 대상이 서로 다른 속도로 변하기 때문이다. 감사인의 스냅샷이 가장 빨리 낡는다 — 이는 특정 연도의 한 주에 사실이었던 것을 말할 뿐이다. 지속 중인 관행에 대한 주장과 투명성 수치는 지속적인 상태를 묘사하므로 훨씬 오래 가치를 유지한다 — 그리고 투명성 보고서는 셋 중 가장 높은 바닥값을 유지한다. 한때 수치를 공개한 회사는 조용한 1년으로도 뒤집히지 않는 무언가를 이미 스스로 확립했기 때문이다.
완전히 다른 형태다. 다른 종류의 질문에 답하기 때문이다: 가산 가중합으로, 기능들이 더해지고 없는 것은 부족분으로 취급된다. 13개 필드 중 12개가 가중치를 지니며, 합계 34점이다. 13번째는 연간 가격이다 — 독자가 알고 싶어 하므로 공개되지만, 12개월 선결제 할인은 서비스의 속성이 아니라 상업적 조건이므로 가중치는 0이다.
| 필드 | 가중치 | 재확인 |
|---|---|---|
| 현재 진행 중인 검열 환경에서 작동함 | 5 | 30일 |
| 클라이언트가 있는 플랫폼 | 4 | 30일 |
| 출구 위치를 제공하는 국가 | 4 | 90일 |
| 월별 가격 USD, 월 단위 요금제, 청구 금액 기준 | 3 | 30일 |
| 사용 가능한 무료 구간 | 3 | 30일 |
| 제공되는 프로토콜 | 3 | 30일 |
| 킬 스위치 적용 범위 | 3 | 30일 |
| 동시 연결 | 2 | 30일 |
| 사용 시작 장벽 | 2 | 30일 |
| P2P 허용 | 2 | 30일 |
| 주요 스트리밍 서비스 접속 가능 | 2 | 30일 |
| 분할 터널링 사용 가능 | 1 | 30일 |
| 연간 요금제 가격 USD, 첫 기간 청구 금액 기준 | — | 30일 |
결과는 값을 지닌 필드에 대해서만 평균을 내므로, 아무도 채우지 않은 필드가 있다고 해서 프로바이더가 불이익을 받지 않는다. 검열 우회는 가장 무겁게 가중된다 — 정작 중요한 곳에서 서비스가 애초에 작동하는지를 결정하는 유일한 사용성 속성이기 때문이다. 스플릿 터널링은 가장 가볍다 — 그 부재는 불편일 뿐이기 때문이다.
가격은 보안 축이 아니라 여기에 들어오며, 그것도 월간 요금만 해당한다. 연간 요금은 사이트 전체에 표시되지만 채점되지는 않는다: 12개월 선결제 할인은 서비스의 속성이 아니라 상업적 조건이기 때문이다.
완전성 50%에서의 점수는 95%에서의 같은 점수와는 다른 주장이므로, 완전성은 점수와 함께 공표되며 둘은 나란히 표시된다. 이는 확인된 필드의 비율을 나타낸다.
그와 함께, 모든 레코드는 주요 공백을 지닌다: 무엇이 확인되지 않았는지, 무엇이 그것을 해결할지, 그리고 숫자에 단서를 다는 유의사항을 담은 분석 문장이다. 여기서 독자는 보증 보고서가 Type II가 아니라 Type I이라는 것이나, 서버 소재 국가가 라우팅 메모에서 추론되었다는 것을 알게 된다.
긴 공백 목록과 높은 점수는 모순이 아니다: 점수는 근거가 뒷받침하는 바를 말하고, 공백은 근거가 얼마나 있었는지를 말한다. 어느 쪽도 다른 쪽을 돋보이게 하려고 숨겨지지 않는다.
프로바이더가 아무것도 공개하지 않으면 해당 필드는 불명으로 남는다. 추정되지도, 경쟁사에서 유추되지도, 마케팅 수치로 조용히 채워지지도, 어느 쪽으로든 추측되지도 않는다 — 그 비용은 무지 채널이 부담하며, 이는 비용이 발생하기에 정직한 자리다. 표에서 미확인 값은 —로 표시되고 어느 방향으로 정렬해도 맨 뒤에 온다: 서버 보유국 수 오름차순 정렬이 알려주기를 거부한 프로바이더에게 보상을 주지는 않는다.
두 축, 두 하한선. 의도적으로 서로 다른 높이에 설정되어 있다. 보안에 대해서는 실질적 필드 중 30% 미만만 확인된 경우, 또는 — 확인율 50% 미만이고 35포인트 미만인 상태에서 — 지배적 위험이 우리 자체의 ignorance인 경우 모델은 판정을 보류한다. 둘 다 해당 프로바이더에 대한 언명이 아니다: 조사가 그것을 자리매김할 만큼 나아가지 못했다는 뜻이며, 77개 중 9개가 해당함.
사용성에 대해서는 하한선이 더 높다 — 점수는 이용 가능한 가중치의 30%가 아니라 50%에 근거해야 한다 — 더 높은 이유는 두 축이 공백에 값을 매기는 방식이 다르기 때문이다. 보안은 점수 내부에서 무지에 값을 매기므로 빈약한 레코드는 이미 그 비용을 치르고 있다.
사용성에는 그런 채널이 없다: 확인되지 않은 기능은 그저 평균에서 빠질 뿐이므로, 하한선이 없다면 알려진 필드 2개짜리 레코드가 측정된 레코드처럼 보일 것이다. 77개 중 15개의 레코드가 usability.state: no_data를 공개하고 있으며, 그들이 지닌 숫자는 측정값이 아니라 하한값이다 — 알려진 점수와 나란히 두어 마치 둘이 비교 가능한 것처럼 표시되지 않는다.
여섯 가지 한계를 나중에 발견되는 대신 모델과 함께 공표한다. 이들은 methodology.json의 일부이며 모델이 산출하는 모든 점수와 함께 따라다닌다. 그래서 바꿔 말하지 않고 여기에 그대로 싣는다:
expires_at을 읽어라.key_gaps에 이를 밝혀야 한다.V15_assurance_strength는 unknown으로 읽히고, 모든 감사된 프로바이더는 자체 보고서가 말하는 값이 아니라 시장 표준에 따라 반영된다. 이 필드는 선언된 강도를 기록하는 것이지 그 이면의 엄밀성을 기록하는 것이 아니다. 감사 계약에는 합리적 확신 의견이 포함되면서도 범위가 좁을 수 있으며, 그 범위를 나타내는 것이 V03_audit_subject와 V04_scope_servers이다.verdict: no_data가 이를 명시한다. 어느 점수를 읽기 전에 두 축 모두에서 completeness를 읽어라.편집에 의한 조정은 전혀 없다. 이 방법론의 이전 버전에서는 편집자가 공표된 사유와 함께 계산된 점수를 최대 2포인트까지 움직일 수 있었으나, 이는 폐지되었다. 이제는 모든 프로바이더 페이지의 세부 내역이 연산 전체를 보여주며, 그 연산에서 나오지 않은 숫자는 그 내역을 거짓으로 만들기 때문이다.
편집적 판단이 자리할 곳은 하나이며, 그것은 점수가 아니다: 별도로 유지되고 결코 섞이지 않는 수작업 품질 등급이다. 편집자가 어떤 레코드가 잘못되었다고 판단하면, 그 경로는 어떤 독자에게나 열려 있는 것과 같다 — 근거를 바꾸고 모델이 다시 계산하게 하는 것이다.
점수는 가져올 때마다, 그리고 요청 시 다시 계산된다. 모델 버전은 모든 레코드에 한 번에 적용되므로, 그 변경은 한 행이 아니라 레지스터 전체를 움직인다 — 이는 마땅히 일어나야 할 일이며, 그래서 모든 변경이 공개 로그에 기록된다. 프로바이더의 갱신일은 무언가 중요한 변화가 있을 때만 움직인다. 아무것도 바꾸지 않는 재가져오기는 모든 날짜를 그대로 둔다 — 77개 페이지에 오늘 날짜를 찍는 것은 우리가 얻지 못한 신선함의 인상을 주는 것이기 때문이다.
살 수 있는 것은 누군가 링크를 통해 가입할 때의 수수료와 — 만약 유료 게재가 언젠가 판매된다면 — 랭킹 밖에 있는, 라벨이 붙은 독자적인 영역뿐이다. 오늘 기준으로는 둘 다 활성화되어 있지 않다 — 어떤 링크에도 제휴 매개변수가 붙어 있지 않고 어떤 게재도 판매되지 않았다 — 그리고 둘 다 나타나는 자리와 제휴 공개에서 공개된다. 랭킹은 근거로부터 계산되고 그 근거는 옆에 공개되어 있으므로, 더 나은 순위를 사려면 공개된 레코드 자체를 바꿔야 한다 — 이는 누구나 확인할 수 있는 바로 그것이다.
threshold노출에 비례한 침묵
P01과 P03이 {none_known, unknown}에 있고 P05가 {none, unknown, fresh_no_numbers}에 있을 때만 작동; risk = min(params.cap, params.per_year x 운영 연수 x weight)이며, weight는 노출 구간에 따른 params.weight에서 가져옴. 침묵은 누적되므로 연 단위로 가격을 산정함: 레코드에 아무것도 없는 15년은 5년과 같은 주장이 아니며, 정액 구간도 그렇게 명시함. 출시 연도가 불명인 프로바이더는 R08에 따라 여기서 아무것도 부과하지 않음
R08_unknown_pricing채널 6개constraint스키마의 모든 위험 및 바닥값 표
산술 규칙으로서의 무죄 추정
프로바이더에 대한 판정에만 적용되며, 공개된 채널 사전 정보로 작성된 불명(C01 = prior_0.550)에는 절대 적용되지 않음. 이는 판정이 아니라 기본 비율임. 그 외에는 해당 필드에서 risk(unknown) <= 0.50 x risk(확인된 최악의 값)이며 그 값과 같아질 수 없음; caught lie는 항상 빈 값보다 우선함; 거짓말 축과 모든 사건 필드에서 risk(unknown) = 0.000; 빈 값의 전체 가격은 한 번, 무지 상태에서, 그것이 우리 것이라고 표시된 곳에서 지불됨
R09_channel_combination채널 8개noisy_or8개 필드 읽음
8개 채널이 하나의 숫자가 되는 방식
score = 100 x 여덟 채널에 대한 product(1 - min(0.90, r_c)); 일괄 하한이나 상한 없음; S18은 아홉 번째 채널이 아니라 무결성 내부에 들어간다
R10_disclosure_decay공개decaymax4개 필드 읽음
불리한 사건에도 경과 시간이 적용됨
disclosure = P01, P02 및 P03 중 해당 필드 자체의 감쇠 후 가격의 최댓값 — 한 경로는 최악의 값으로 취하고, 절대 합성하지 않는다. 하나의 압수에 대한 세 가지 코딩은 하나의 압수이기 때문이다. 동일한 사건에 대한 P12_case_history 항목의 날짜에 decay(plateau=12, half_life=60, floor=0.35)를 적용하며, 일치 여부는 항목에 적힌 발생 내용으로 판단한다 — P01은 seizure에, P03은 court_order, subpoena 또는 mandate_order에 대응시킨다 — 그리고 결과로는 절대 판단하지 않는다. 아무것도 산출하지 않은 사건도 여전히 판정을 날짜화하는 사건이기 때문이다. P02는 결과로 일치시킨다. 이 경우 결과가 사실이기 때문이다. 그러한 항목이 없는 불리한 사건은 감쇠되지 않은 값을 유지한다. 확인된 공개가 영구적으로 레코드에 남기 때문에, 관행 곡선의 형태는 더 높은 하한을 둔다. 여기서는 관행 근거의 0.15에 비해 0.35다
R11_evidence_voiding보존공개무결성gate1개 필드 읽음
지배권 변경은 이전되는 것을 초기화함
M16 이전 날짜의 근거는 현재 소유자에 연결되지 않는다: 감사는 시리즈 보너스를 잃고, 공개 사건은 R10 하한으로 내려가며, 자매 판정은 전혀 이전되지 않는다
R12_report_plausibility무결성무지threshold5개 필드 읽음
투명성 보고서는 그 내용만큼의 가치가 있음
P09 = 0이고 P08이 params.min_requests를 초과하며, 레코드가 공개할 개인별 레코드가 존재함을 확인할 때 P06 = zero_implausible — 보존 심각도가 params.min_retention 이상인 경우. 사용자 규모만으로 판단하면 그 목적의 반대를 처벌하게 된다. 수치를 공개하고 부여된 것이 없다고 보고한 프로바이더는 거짓말쟁이로 불린 반면, 아무것도 공개하지 않은 프로바이더는 아무런 대가도 치르지 않았다. 부여된 것이 0이라는 것은 자체 레코드에 부여할 무언가를 보유한다고 적힌 프로바이더에 대해서만 믿기 어렵다. 확인된 로그 없음 판정에 대해서는 예상되는 답이며, 모델은 한 채널에서 인정한 것을 다른 채널에서 믿지 않아서는 안 된다. 이것이 발동하면 P05의 태세 완화는 0.00으로 설정되고 무결성은 params.route의 경로를 얻는다
R13_derived_jurisdiction관할권noisy_ormax6개 필드 읽음
의무 필드는 판정되지 않고 도출됨
C10 = M06 in MANDATE_COUNTRIES; C11 = M11 in MANDATE_COUNTRIES; M11 = M06이면 둘은 하나의 상황이 되며 관할권은 C10, C11, P11의 최댓값을 취한다. 절대로 noisy-OR를 사용하지 않는다. 플릿 노출은 max(C09b, P04)로 들어가며, 이는 회사 경로와 별개의 경로다. 수기 재정의에는 자체 출처가 필요하며, 그렇게 공개된다
R14_disclosure_rate공개threshold2개 필드 읽음
데이터를 산출한 요청의 비율
P08이 params.min_requests에 도달하면 rate = P09 / P08; risk = params.weight x rate; 관할권 간 비교 가능성이 낮으므로 rate 옆에 공개한다 — 한 국가에서 요청은 법원 명령이고 다른 국가에서는 서신일 수 있다
R15_free_tier_flag채널 없음flag2개 필드 읽음
무료 요금제도 어떤 방식으로든 비용이 지불됨
params에 명시된 모든 필드가 각 필드에 대해 params가 나열한 값 중 하나를 가지면 S22 = flagged, 그렇지 않으면 none; 어느 축에서도 점수를 변경하지 않는다 — 두 입력은 이미 있어야 할 곳에서 각각 가격이 반영되어 있으며, 두 입력의 결합에 가격을 매기는 것은 두 축이 존재하는 이유인 평균화를 거부하지 않는 것이기 때문이다
R16_opaque_at_mass_scale무결성threshold2개 필드 읽음
불투명성은 더 많은 사람을 포괄할수록 악화됨
X03 = 불투명하고 M08 = 대규모인 경우 -> 불투명한 경우 X03 자체 가격 대신 params.at_mass_scale
R17_location_notice관할권derivation3개 필드 읽음
의무 국가가 제공되는 경우 실제로 그곳에 있는 것
C09 = MANDATE_COUNTRIES에 나타나는 U02 국가로, 파생되며 수동 입력되지 않음. C09만으로는 아무것도 부과하지 않으며 완전성 분모에서도 제외됨: 그러한 국가에 출구를 제공한다는 사실만으로는 아무것도 말해 주지 않고, 독자가 선택한 위치에 대해 공개됨. 부과되는 것은 C09b이며, C09가 비어 있지 않을 때 물어볼 가치가 있는 유일한 질문 — 하드웨어가 실제로 해당 의무 아래에 있는지, 아니면 위치는 가상이고 하드웨어는 다른 곳에 있는지임. C09가 비어 있으면 C09b는 n/a이며, P04와 max로 결합됨: 의무 아래에 존재한다는 하나의 상황이 두 번 코딩됨
R18_audit_gate보존gatemax2개 필드 읽음
감사가 취하는 보존 분기
V11은 보존을 명시함 -> params.credence_stated의 명시된 구간; V01 = yes_*이고 V11이 침묵함 -> params.credence_silent x subject_factor의 침묵 구간(대상이 확인되지 않은 경우 params.subject_default), 그리고 어떤 구간도 params.credence_max를 초과하지 않음; 그 외에는 문서 근거가 전혀 없음; 선택된 구간의 심각도 = max(C01_linkable_retention, V11_audit_findings), noisy-OR는 사용하지 않음 — 하나의 상황을 두 번 코딩해도 누적해서는 안 됨(R04와 같음)
R19_audit_decay보존decay1개 필드 읽음
구성이 계속 바뀜
decay(params.decay) — 매듭 없이 개월 단위로 연속적임
R20_practice_ages보존decaymax1개 필드 읽음
문서화된 모든 사건에는 자체 날짜가 있음
P12의 outcome = nothing_produced인 각 이벤트는 자체 날짜에 대해 decay(practice, 자체 날짜)에 기여함; 필드의 practice 값은 이벤트들의 합이 아니라 이벤트 전체에 대한 max임; 여러 압수를 하나로 합쳤던 P01 및 P03의 단일 날짜 해석을 대체함
R21_circumvention_decayusabilitydecay1개 필드 읽음
차단이 근거보다 빠르게 진행됨
U06 = 필드 자체의 기준일로부터 12개월이 넘으면 입증된 점수를 자체 신고로 처리함; 레코드는 이미 모든 필드에 날짜를 지정하므로, 연령은 값에 기록하는 대신 그 날짜에서 읽음; 진실성이 만료되는 유일한 필드이므로 decay가 적용되는 유일한 사용성 필드임
R22_completeness무지constraint모든 필드의 완전성 열
분모가 세는 것
completeness = 예인 실질 필드; 해당 없음은 분모에서 제외되고, 불명은 분모에 남음; 신원 필드, 모델 출력, 중복 레이블 및 사용성 필드는 모두 제외됨 — 사용성 커버리지는 S16으로 별도 보고됨
R23_credence_defaults보존constraint스키마의 모든 요인 표
읽지 않은 근거는 점수에 반영되지 않음
R08의 반대편이며, 의도적으로 R08과 대칭이 아니다. factor(unknown) <= 해당 필드에서 실제 근거의 가장 약한 단계이며, 공개 거부를 인코딩하는 모든 값(V06 unnamed, V02 none)보다 엄격히 높다. 아무도 읽지 않은 감사를 액면 그대로 인정하면 구매한 보고서가 점수로 세탁된다. 우리의 무지를 프로바이더의 거부인 것처럼 부과하는 것은 반대의 오류다. 검증되지 않은 근거를 인정하지 않는 것은 고발이 아니다 — 프로바이더는 판정이 아니라 사전확률, 즉 시장의 기본 비율로 돌아간다
R24_retention_composition보존productmax14개 필드 읽음
보존 하위 채널이 하나의 숫자가 되는 방식
네 개의 하위 채널은 평균을 내지 않음. credence.paper = R18이 선택한 구간(명시됨: credence_stated; 침묵함: credence_silent x subject_factor) x 해당 구간 자체의 .conf의 source_credence x audit_decay(R19) x publication_factor x engagement_factor(확고성 x 표준 x 보증 강도) x 명시된 구간의 scope_factor x R11이 시리즈를 유지할 때의 series_bonus이며, credence_max로 상한을 둠. credence.practice = 날짜가 있는 nothing_produced 이벤트 전체에 대한 practice_credence x practice_decay(R20)의 max임. credence = min(credence_max, max(paper, practice) + secondary_weight x min(paper, practice)) — 두 종류의 근거가 하나보다 강하지만, 어떤 양의 근거도 확실성에 도달하지 못함. severity = R18에 따른 max(C01, V11)이며, 어느 쪽도 확인되지 않으면 prior임. retention = credence x severity + (1 - credence) x max(severity, prior): 시장 기준률로의 회귀는 상향만 가능하므로, 자신에게 불리한 인정은 표면값을 유지함. retention.floor = max(retention, C12 하한:)을 마지막에 적용함. 터널에 범위가 한정된 감사로는 앱의 사실을 해소할 수 없기 때문임
R25_integrity_composition무결성noisy_or14개 필드 읽음
무결성 경로가 하나의 숫자가 되는 방식
무결성 = 발동하는 경로에 대해 (1 - route)의 곱을 1에서 뺀 값: 거짓말 축(R04), 소유자 투명성(대규모에서는 R16), 소유 그룹의 이력, 수익화와 그룹이 판매하는 것을 결합한 항목(R03), 사고 처리, 절대적 주장, 평생 이용권 홍보, 매입된 보도(R01), 믿기 어려운 보고 경로(R12), 스토어 신고 공백(R28), disclosure_rate_weight x rate(R14), 클러스터 전염(R02, S18). 경로는 별개의 확인 사항이므로 누적된다. 한 가지 상황을 두 번 코드화한 쌍은 각자의 규칙 안에서 이미 max로 합쳐졌으므로 여기서 다시 합치지 않는다
R26_hygiene_composition위생capped_sum12개 필드 읽음
위생 필드가 하나의 숫자가 되는 방식
위생 = min(params.cap, 여기로 라우팅된 각 위험의 가격 합). 보안 축에서 유일한 가산 채널이다. 여기에는 하나의 확인 사항이 결과를 결정하는 것이 아니라, 작은 독립적 누수가 누적되며, cap은 사소한 수집이 쌓여 공개로 읽히는 것을 막는다. 목록 필드는 가장 저렴한 구성원 하나의 가치만 가진다 — 익명 결제 수단 하나면 충분하다 — 구성원에 가격이 매겨지지 않으면 자체 불명 가격으로 대체된다. C13_weakest_protocol은 여기서 파생되는 가산 항목(R32)이다. 실제로 사용 중인 레거시 전송 방식은 지나가며 수집되는 한 가지 요소일 뿐, 결과를 결정하는 확인 사항이 아니다
R27_report_concealment무결성max2개 필드 읽음
요청이 보장될 정도의 규모에서 공개에 관한 침묵
중간 또는 대규모 규모의 프로바이더는 확실히 요청을 받으므로, 수치가 확인됨 상태에서 없는 것은 우리 조사의 공백이 아니라 프로바이더에 관한 사실이다. P05 = none은 0.150, fresh_no_numbers는 0.100 — 중요한 수치 하나를 누락한 공개 보고서는 이 현상의 가장 날카로운 형태다 — stale은 0.050이다. 확인됨 상태의 값에서만 발동한다. 불명은 여기서 아무것도 부과하지 않고, 우리 자신이 살펴보지 않은 경우가 속하는 무지에서 가격이 매겨진다. R12의 반대편이다. 하나는 믿기 어려운 수치에 가격을 매기고, 이것은 어떤 수치도 없는 상태에 가격을 매긴다
R28_store_declaration_gap무결성max1개 필드 읽음
스토어 선언과 프로바이더가 스토어에 제공한 정책의 대조
필수 스토어 양식은 프로바이더가 자사 앱에 관해 서명한 자체 진술이므로, 양식이 신고하는 내용은 양식이 스토어에 가리키는 프로바이더 자체의 정책에도 나타나야 한다. 한 방향으로만 읽는다. 앱은 서비스의 부분집합이므로, 정책보다 적게 신고하는 양식은 범위로 설명되며 아무것도 부과하지 않는다. 반면 양식이 신고했는데 정책에는 전혀 언급되지 않은 범주는 그러한 변명이 없다. 공개되지 않은 범주가 드러내는 내용에 따라 등급을 매긴다. 식별자 또는 진단은 0.150, 행동 — 앱 활동, 설치된 앱, 위치 또는 광고 목적 — 은 0.300, 무로그 주장이 부인하는 바로 그 수집을 신고한 경우는 0.450이다. 두 스토어는 수집을 서로 다르게 정의하므로 Apple 양식과 Google 양식의 차이 자체는 확인 사항이 아니다. 스토어 간 가장 큰 공백을 적용한다
R29_session_state보존constraint2개 필드 읽음
연결은 연결의 레코드가 아님
C01은 세션이 끝난 뒤에도 프로바이더가 사람과 연결할 수 있는 대상을 평가한다. 터널이 열려 있는 동안에만 존재하는 상태 — 서버가 패킷을 라우팅하고 기기 한도를 시행하기 위해 보유하는 원본 IP, 계정 ID, 연결 시각 — 는 연결 자체이지 그 기록이 아니다. 이를 보존으로 가격을 매기면 VPN 작동 방식을 설명한 프로바이더에 비용을 부과하게 된다. 더 나쁜 점은 아무 말도 하지 않는 것보다 더 많이 부과한다는 것이다. 이 필드의 공란은 시장 사전확률 0.550이고 source_ip는 0.750이므로, 15분 버퍼에 대한 정직한 설명이 침묵보다 더 비싸다. 이 예외는 좁아야 하며, 그렇지 않으면 모든 프로바이더가 쓰는 문장이 된다. 프로바이더 자체 문서가 세션 종료에 연결된 삭제 기간을 명시하고 그 기간이 24시간 이하인 경우에만 적용된다 — 가장 짧은 달력 단위이며, 서비스에 필요한 어떤 종료 처리보다 길고 로그가 유지되는 어떤 순환 주기보다 짧다. 신고되지 않은 기간은 보존이다. 달력 기간 — 7일, 30일, 순환 주기 — 은 어떻게 표현되든 보존이다. 설계상 세션보다 오래 지속되기 때문이다. 해당 기간이 지난 뒤 프로바이더가 보존하는 것은 무엇이든 자체 등급의 가치가 있으며, 이 예외는 프로바이더의 주장만 읽는다. 감사에서 데이터가 존재한다고 확인된 경우 R18은 이미 그 확인 사항을 주장보다 높은 곳에 둔다
R30_usability_foundationusabilitythreshold모든 사용성 필드의 가중치 열
사용성 점수가 표에 얼마나 의존하는가
사용성 합계는 읽을 수 있었던 가중치로 나눈다. 누구도 확인하지 않은 필드는 0점으로 처리하지 않고 분모에서 제외한다. 적용 범위는 품질이 아니기 때문이다. 그 대가는 점수가 자체 기반을 볼 수 없다는 것이다. 가장 무거운 필드를 읽지 못한 열도, 채워진 열과 같은 형태의 수치를 낸다. S21 = 읽은 가중치 / 실제 가중치이며, 실제 가중치는 가중치가 부여된 모든 사용성 필드에서 n/a인 필드를 뺀 것이다. usability_foundation_floor 미만에서는 S20 = no_data이다. 표 상태의 절반도 안 되는 정보에 기대는 수치는 어떤 필드가 채워졌는지가 아니라 제품이 무엇을 하는지를 나타낸다. 이 축에는 무지 채널이 없으므로 기준선은 보안 기준선보다 엄격하다. 보안은 점수 안의 공란에 비용을 부과하지만 사용성은 공란에 아무 곳에서도 비용을 부과하지 않는다. 보안 점수와 마찬가지로 점수는 no_data 상태에서도 계속 공개된다. 공개되지 않은 수치는 확인할 수 없다.
R32_protocol_floor위생derivationmax1개 필드 읽음
여전히 제공되는 가장 약한 전송 방식
C13_weakest_protocol은 C13 자체 표의 위험 순서에 따른 U07_protocols 내 최악의 프로토콜이며, 로드 시 파생되고 직접 입력되지 않는다 — R17이 U02에서 C09를 파생하는 것과 같은 형태다. 이는 R26_hygiene_composition에 하나의 가산 항목으로 들어가며, 그곳의 모든 항목과 마찬가지로 위생 채널 cap의 제한을 받는다. 최신 전송 방식만 제공하는 플릿에서는 이 필드가 이름이 아니라 not_applicable이다. 0.000보다 높은 프로토콜 가격이 없으면 지적할 약한 제공 항목이 없기 때문이다. 동률 해소 순서에 따라 좋은 항목 중 가장 덜 좋은 것을 고르면 아무도 하지 않은 확인 사항을 공개하게 된다. 이 필드는 PPTP와 L2TP가 아직 사용 중인 저가 구간을 위해 유지된다. proprietary 가격은 공급업체가 자체 프로토콜을 작성한 데 대한 비용이 아니다. 그 프로토콜이 약한지 알 수 없는 데 대한 가격이다. 이것이 vendor_open에 비용이 없는 이유다. 소스가 공개되고 독립적으로 검토된 공급업체 전송 방식은 평가할 수 있으며, 평가 내용 어디에도 그것이 약하다고 쓰여 있지 않다. 그럼에도 비용을 부과하면 이미 해소된 무지에 가격을 매기게 되고, 소스를 공개하는 것을 공개하지 않는 것보다 더 비싸게 만든다.
R33_exit_conduct아키텍처max2개 필드 읽음
출구가 운반하는 트래픽에 하는 처리
아키텍처 = max(C00_architecture의 가격, C14_traffic_modification의 가격). 출구를 누가 운영하는지와 출구가 통과하는 내용에 무엇을 하는지는 하나의 질문이다 — 터널의 반대편이 어느 쪽에 있는지에 관한 질문이다 — 그리고 하나의 나쁜 답이 이를 결정하므로, 이 채널은 두 가격의 합이 아니라 더 높은 가격을 취한다. 낯선 사람들이 운영하는 출구가 헤더까지 다시 작성한다고 해서 어느 한쪽보다 두 배 나쁜 것은 아니다. 그것은 그 정도로 나쁘다. headers_injected(0.300)는 통과하는 트래픽에 추가된 세션 식별자 또는 그 밖의 헤더이며, 모든 목적지에 사용자 이름을 넘긴다. content_injected(0.500)는 페이지에 배치된 스크립트, 광고 또는 기타 자료다. tls_interception(0.750)은 출구가 암호화된 세션을 여는 것이다. none은 그렇게 명시한 문서에서 읽어내야 하는데, 그런 문서는 드물다. 따라서 unknown은 C00과 같은 시장 사전확률을 가지며 나머지는 무지 채널이 처리한다.
M14_inclusion_basis뿐이다. 카탈로그에 없는 프로바이더는 해당 프로바이더에 대한 근거이기 전에 이러한 수작업 선정에 대한 근거이며, 여기서는 누락 규모를 추정하지 않는다.4
어떤 채널도 0.9을 넘을 수 없다 — 문서를 읽는 것만으로는 확실성을 얻을 수 없기 때문이다. 그리고 하나의 사실이 채널을 아래에서 고정하며, 그곳에는 어떤 감사도 닿지 못한다.
보존 채널
흠 없는 보고서는 잔을 비운다. 남는 것은 프로바이더가 보유한 식별자다:
보고서는 기록된 것만 말할 수 있다. 식별자는 무언가 기록되었든 아니든 이용자를 특정할 수 있다는 것을 말해준다 — 둘은 같은 질문에 대한 답이 아니다. 그래서 모델은 전자가 후자를 결정하도록 두지 않는다.
3
곱셈이 만들어내는 결과가 이것이다. 일곱 개의 채널이 완벽해도 여덟 번째 하나가 레코드를 결정지을 수 있다 — 그래서 프로바이더는 다른 모든 것을 정돈해 실격 요인을 평균으로 희석시킬 수 없다. 컨트롤을 움직여 보라.
각각 0.05를 유지하는 일곱 개의 채널과, 독자가 움직일 수 있는 하나 — 빨간색
아무것도 쌓지 않았고 아무것도 평균 내지 않았다. 정돈된 일곱 개의 채널은 그 컨트롤을 끝까지 움직인 뒤에도 여전히 정돈된 상태다 — 그리고 여덟 번째가 깎아낸 것을 되사올 수는 없다. 그것이 바로 여덟을 곱하는 이유 전부다.
8
그림 속 각 선은 자신이 응답하는 채널의 이름을 지닌 규칙이다. 모두 이 페이지 아래쪽에 전문이 실려 있다 — 독자가 볼 수 없는 규칙은 믿을 수밖에 없는 규칙이 되기 때문이다.
왼쪽 그림은 각 규칙이 읽어내는 모든 필드를, 오른쪽 그림은 각 규칙이 응답하는 채널을 보여준다. 32개 모두 이 페이지 아래쪽에 전문이 실려 있다 — 독자가 볼 수 없는 규칙은 믿을 수밖에 없는 규칙이 되기 때문이다. 이 기계가 큰 것은 정교해서가 아니라 질문 자체가 크기 때문이며, 한 단락으로 요약할 수 있을 만큼 작은 모델이라면 잘못된 대상을 요약하고 있는 것이다.
5
이 모델에서 액면 그대로 받아들여지는 것은 없다. 보고서가 말하는 것과 누가 말하는지는 별개의 두 사다리이며, 서로 곱해진다.
보고서가 말하는 것보존의 credence_stated 대 credence_silent
누가 말하는가source_credence의 4단계
이 둘은 곱해진다. 누가 말하는가의 4단계, 그리고 각각이 무엇인지:
1
여기서는 레지스터가 그리는 것과 같은 비율로 그렸다. 그 비율 자체가 주장이기 때문이다: 하나는 순위를 정하고, 다른 하나는 그로써 무엇을 얻는지 설명한다.
보안은 8개의 질문을 던진다
67개의 보안 필드 모두가 그중 최소 하나에 반영된다. 여덟 개의 답은 곱해진다.
순위를 결정함
얻는 것을 설명함
사용성은 12개 필드에 가중치를 둔다
가중치 합은 34이며, 12개는 가중 평균으로 더해진다. 13번째 필드는 가중치 0으로 다뤄진다 — 공개는 되지만 무엇으로도 값이 매겨지지 않는다.
7
공백 그 자체에 값을 매기는 유일한 채널. 그리고 이 사이트에서 프로바이더 스스로 움직일 수 있는 유일한 숫자이기도 하다 — 움직이는 방법은 요청이 아니라 공개다.
0.00레코드에 부과됨
min(0.6, 0.9 × (1 − established)) × (1 − 0.4 × posture)
모른다는 것은 중립이 아니다. 아무것도 확인되지 않은 프로바이더는 실제 위험을 안고 있으며, 모델은 정중한 공백을 남기는 대신 그것에 값을 매긴다 — 그래서 이것이 사이트 전체에서 프로바이더 스스로 움직일 수 있는 유일한 숫자가 된다. 다른 모든 채널은 무언가 발견되기를 기다리지만, 이것만은 무언가 공개되기를 기다린다.
6
세 종류의 근거, 세 개의 곡선 — 각각 일정 기간 평평하게 유지되다가 결코 그 아래로 내려가지 않는 바닥까지 떨어진다. 감사는 특정 날짜에 일어난 사건이지, 프로바이더가 처한 상태가 아니다.
세로축: 근거가 여전히 지닌 가중치 — 위쪽이 만점, 아래쪽이 그 자체의 바닥값
오늘1년23456년
모든 곡선은 일정 기간 평평하게 유지되다가 결코 그 아래로 내려가지 않는 바닥까지 떨어진다 — 근거는 낡아갈 뿐 거짓이 되지는 않는다. 점들은 날짜가 있는 감사를 공개한 등록 30개의 레코드로, 각자의 경과 연수 위치에서 감사 곡선 위에 놓여 있다. 감사는 프로바이더가 처한 상태가 아니라 특정 날짜에 일어난 사건이다.
9
여기 있는 모든 VPN은 100점 만점의 정수 하나를 받는다. 그리고 모델은 그 척도를 미리 공표한 4개의 임계값으로 나눈다. 임계값을 넘으면 말이 바뀐다. 그 밖의 어떤 것도 이를 움직이지 못한다 — 더 멋진 로고도, 할인도, 보도자료도.
구간은 범위이며, 레코드 하나가 채점되기도 전에 고정되고, 누구나 임계값을 넘는 순간을 스스로 확인할 수 있도록 공개된다 — 숫자는 계산되고 말은 거기서 읽히며, 어느 쪽도 살 수 없다.
2
무언가를 쌓아 올리는 것이 아니다. 각 채널은 직전 채널이 남긴 비율을 그대로 이어받는다 — 그래서 여덟은 숫자의 나열이 아니라 하나의 사슬이 된다.
score = 100 × ∏ (1 − channel)
이 유형은 noisy-OR over independent risk channels다. 여기서는 등록된 것 중 최고 점수인 Proton VPN의 레코드로 계산했다 — 아래 숫자는 이 자리를 위해 지어낸 예시가 아니라 그 레코드 자체의 것이다.
3개의 채널은 아무것도 찾지 못해 아무것도 깎지 않는다. 나머지 5개는 각각 조금씩 깎아내며, 그 비율은 서로 상쇄되지 않고 누적된다: 100 중 남는 것은 70다.