Bridges and the bridge authority publish bridge descriptors that are used by censored clients to connect to the network. We aim for publishing all network directory data for informational and statistical purposes. We cannot, however, make bridge descriptors publicly available in the same way as we publish relay descriptors, because that would defeat the purpose of making bridges hard to enumerate for censors. We therefore sanitize bridge descriptors by removing all potentially identifying information and then publish sanitized versions.
The purpose of this document is to specify the document format of sanitized bridge descriptors. These descriptors are based on original, non-sanitized bridge descriptors after sanitizing any parts that would make it easier to enumerate bridges. Unless stated otherwise, the document meta-format of the Tor directory protocol, version 3 is used.
Sanitization has changed several times over the years. The following list contains all major changes that resulted in raising the "@type" annotation of a descriptor:
The following sanitizing steps are applied to original, non-sanitized bridge descriptors.
"@type" SP DescriptorType SP Version
HashedFingerprint = SHA1(Fingerprint)
HashedMasterKeyEd25519 = SHA256(MasterKeyEd25519)
[Removed.]
SanitizedIpv4Address = "10." | KeyedHash
KeyedHash = SHA256(Ipv4Address | Fingerprint | Secret)[:3]
SanitizedIpv6Address = "[fd9f:2e19:3bcf::" | KeyedHash | "]"
KeyedHash = SHA256(Ipv6Address | Fingerprint | Secret)[:3]
SanitizedPort = KeyedHash / 2^2 + 2^15 + 2^14
KeyedHash = SHA256(Port | Fingerprint | Secret)[:2]
SanitizedContact = "somebody"
[Removed.]
SanitizedSha1Digest = SHA1(Sha1Digest)
SanitizedSha256Digest = SHA256(Sha256Digest)
SanitizedSha1Digest = SHA1(Sha1Digest)
SanitizedSha256Digest = SHA256(Sha256Digest)
The document format of sanitized bridge server descriptors resembles the document format of (non-sanitized) server descriptors as much as possible. Also refer to the Tor directory protocol, version 3 specification, as the following sections only specify items that differ from their non-sanitized counterparts.
The bridge authority may prefix descriptors with one or more annotation lines containing metadata, and the sanitizer may add annotation lines with metadata about the sanitizing process.
"@purpose" SP Purpose NL
"@type" SP "bridge-server-descriptor" SP Version
The body of a sanitized bridge server descriptor contains several sanitized items as specified in the following:
"router" SP Nickname SP SanitizedAddress SP SanitizedORPort SP SOCKSPort SP SanitizedDirPort NL
"or-address" SP SanitizedAddress ":" SanitizedPort NL
"identity-ed25519" NL CertificateBlock NL
"master-key-ed25519" SP SanitizedMasterKey NL
"fingerprint" SP SanitizedFingerprint NL
"contact" SP SanitizedContact NL
"reject" SP ExitPattern NL
"extra-info-digest" SP SanitizedSha1Digest [SP SanitizedSha256Digest] NL
"family" (SP Name)* NL
"onion-key" NL PublicKeyBlock NL
"signing-key" NL PublicKeyBlock NL
"onion-key-crosscert" NL SignatureBlock NL
"ntor-onion-key-crosscert" SP PublicKey NL
"ntor-onion-key" SP NtorOnionKey NL
"router-sig-ed25519" SP Signature NL
"router-signature" NL SignatureBlock NL
"router-digest-sha256" SP SanitizedSha256Digest NL
"router-digest" SP SanitizedSha1Digest NL
The document format of sanitized extra-info descriptors follows the same approach as sanitized server descriptors by changing as few items as possible in their original, non-sanitized counterpart. The original format is specified in the Tor directory protocol, version 3. Only the changes to that specification are listed below.
"@type" SP "bridge-extra-info" SP Version
Several items in the extra-info descriptor body are changed or removed as compared to original, non-sanitized descriptors:
"extra-info" SP Nickname SP SanitizedFingerprint NL
"transport" SP TransportName NL
"transport-info SP TransportInfo NL
"identity-ed25519" NL CertificateBlock NL
"master-key-ed25519" SP SanitizedMasterKey NL
"router-sig-ed25519" SP Signature NL
"router-signature" NL SignatureBlock NL
"router-digest-sha256" SP SanitizedSha256Digest NL
"router-digest" SP SanitizedSha1Digest NL
The document format of bridge network statuses is loosely based on the network status format specified in the Tor directory protocol, version 2. However, the preamble of bridge network statuses contains far fewer items than that of (relay) network statuses, and the ones that are similar differ in some of the details. That's why all preamble lines that exist in sanitized bridge network statuses are specified below, not just the ones that differ.
Sanitized bridge network statuses start with one or more annotations:
"@type" SP "bridge-network-status" SP Version NL
The preamble contains zero or more of the following items in no predefined order:
"published" SP Publication NL
"flag-thresholds" SP Thresholds NL
"fingerprint" SP Fingerprint NL;
For each bridge, there is one router entry containing one or more items. Similar to the preamble specification, the following specification lists all lines known in sanitized bridge network statuses, including those that are left unchanged in the sanitizing process.
"r" SP Nickname SP SanitizedFingerprint SP SanitizedSha1Digest SP Publication SP SanitizedAddress SP SanitizedORPort SP SanitizedDirPort NL
"a" SP SanitizedAddress ":" SanitizedPort NL
"s" ... NL
"w" ... NL
"p" ... NL
© 2009–2023 The Tor Project
This material is supported in part by the National Science Foundation under Grant No. CNS-0959138. Any opinions, finding, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation. "Tor" and the "Onion Logo" are registered trademarks of The Tor Project, Inc.. Data on this site is freely available under a CC0 no copyright declaration: To the extent possible under law, the Tor Project has waived all copyright and related or neighboring rights in the data. Graphs are licensed under a Creative Commons Attribution 3.0 United States License.