121-hidden-service-authentication.txt 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839
  1. Filename: 121-hidden-service-authentication.txt
  2. Title: Hidden Service Authentication
  3. Version: $Revision$
  4. Last-Modified: $Date$
  5. Author: Tobias Kamm, Thomas Lauterbach, Karsten Loesing, Ferdinand Rieger,
  6. Christoph Weingarten
  7. Created: 10-Sep-2007
  8. Status: Open
  9. Target: 0.2.1.x
  10. Change history:
  11. 26-Sep-2007 Initial proposal for or-dev
  12. 08-Dec-2007 Incorporated comments by Nick posted to or-dev on 10-Oct-2007
  13. 15-Dec-2007 Rewrote complete proposal for better readability, modified
  14. authentication protocol, merged in personal notes
  15. 24-Dec-2007 Replaced misleading term "authentication" by "authorization"
  16. and added some clarifications (comments by Sven Kaffille)
  17. 28-Apr-2008 Updated most parts of the concrete authorization protocol
  18. 04-Jul-2008 Add a simple algorithm to delay descriptor publication for
  19. different clients of a hidden service
  20. 19-Jul-2008 Added INTRODUCE1V cell type (1.2), improved replay
  21. protection for INTRODUCE2 cells (1.3), described limitations
  22. for auth protocols (1.6), improved hidden service protocol
  23. without client authorization (2.1), added second, more
  24. scalable authorization protocol (2.2), rewrote existing
  25. authorization protocol (2.3); changes based on discussion
  26. with Nick
  27. 31-Jul-2008 Limit maximum descriptor size to 20 kilobytes to prevent
  28. abuse.
  29. Overview:
  30. This proposal deals with a general infrastructure for performing
  31. authorization (not necessarily implying authentication) of requests to
  32. hidden services at three points: (1) when downloading and decrypting
  33. parts of the hidden service descriptor, (2) at the introduction point,
  34. and (3) at Bob's Tor client before contacting the rendezvous point. A
  35. service provider will be able to restrict access to his service at these
  36. three points to authorized clients only. Further, the proposal contains
  37. specific authorization protocols as instances that implement the
  38. presented authorization infrastructure.
  39. This proposal is based on v2 hidden service descriptors as described in
  40. proposal 114 and introduced in version 0.2.0.10-alpha.
  41. The proposal is structured as follows: The next section motivates the
  42. integration of authorization mechanisms in the hidden service protocol.
  43. Then we describe a general infrastructure for authorization in hidden
  44. services, followed by specific authorization protocols for this
  45. infrastructure. At the end we discuss a number of attacks and non-attacks
  46. as well as compatibility issues.
  47. Motivation:
  48. The major part of hidden services does not require client authorization
  49. now and won't do so in the future. To the contrary, many clients would
  50. not want to be (pseudonymously) identifiable by the service (though this
  51. is unavoidable to some extent), but rather use the service
  52. anonymously. These services are not addressed by this proposal.
  53. However, there may be certain services which are intended to be accessed
  54. by a limited set of clients only. A possible application might be a
  55. wiki or forum that should only be accessible for a closed user group.
  56. Another, less intuitive example might be a real-time communication
  57. service, where someone provides a presence and messaging service only to
  58. his buddies. Finally, a possible application would be a personal home
  59. server that should be remotely accessed by its owner.
  60. Performing authorization for a hidden service within the Tor network, as
  61. proposed here, offers a range of advantages compared to allowing all
  62. client connections in the first instance and deferring authorization to
  63. the transported protocol:
  64. (1) Reduced traffic: Unauthorized requests would be rejected as early as
  65. possible, thereby reducing the overall traffic in the network generated
  66. by establishing circuits and sending cells.
  67. (2) Better protection of service location: Unauthorized clients could not
  68. force Bob to create circuits to their rendezvous points, thus preventing
  69. the attack described by Øverlier and Syverson in their paper "Locating
  70. Hidden Servers" even without the need for guards.
  71. (3) Hiding activity: Apart from performing the actual authorization, a
  72. service provider could also hide the mere presence of his service from
  73. unauthorized clients when not providing hidden service descriptors to
  74. them, rejecting unauthorized requests already at the introduction
  75. point (ideally without leaking presence information at any of these
  76. points), or not answering unauthorized introduction requests.
  77. (4) Better protection of introduction points: When providing hidden
  78. service descriptors to authorized clients only and encrypting the
  79. introduction points as described in proposal 114, the introduction points
  80. would be unknown to unauthorized clients and thereby protected from DoS
  81. attacks.
  82. (5) Protocol independence: Authorization could be performed for all
  83. transported protocols, regardless of their own capabilities to do so.
  84. (6) Ease of administration: A service provider running multiple hidden
  85. services would be able to configure access at a single place uniformly
  86. instead of doing so for all services separately.
  87. (7) Optional QoS support: Bob could adapt his node selection algorithm
  88. for building the circuit to Alice's rendezvous point depending on a
  89. previously guaranteed QoS level, thus providing better latency or
  90. bandwidth for selected clients.
  91. A disadvantage of performing authorization within the Tor network is
  92. that a hidden service cannot make use of authorization data in
  93. the transported protocol. Tor hidden services were designed to be
  94. independent of the transported protocol. Therefore it's only possible to
  95. either grant or deny access to the whole service, but not to specific
  96. resources of the service.
  97. Authorization often implies authentication, i.e. proving one's identity.
  98. However, when performing authorization within the Tor network, untrusted
  99. points should not gain any useful information about the identities of
  100. communicating parties, neither server nor client. A crucial challenge is
  101. to remain anonymous towards directory servers and introduction points.
  102. However, trying to hide identity from the hidden service is a futile
  103. task, because a client would never know if he is the only authorized
  104. client and therefore perfectly identifiable. Therefore, hiding client
  105. identity from the hidden service is not aimed by this proposal.
  106. The current implementation of hidden services does not provide any kind
  107. of authorization. The hidden service descriptor version 2, introduced by
  108. proposal 114, was designed to use a descriptor cookie for downloading and
  109. decrypting parts of the descriptor content, but this feature is not yet
  110. in use. Further, most relevant cell formats specified in rend-spec
  111. contain fields for authorization data, but those fields are neither
  112. implemented nor do they suffice entirely.
  113. Details:
  114. 1. General infrastructure for authorization to hidden services
  115. We spotted three possible authorization points in the hidden service
  116. protocol:
  117. (1) when downloading and decrypting parts of the hidden service
  118. descriptor,
  119. (2) at the introduction point, and
  120. (3) at Bob's Tor client before contacting the rendezvous point.
  121. The general idea of this proposal is to allow service providers to
  122. restrict access to some or all of these points to authorized clients
  123. only.
  124. 1.1. Client authorization at directory
  125. Since the implementation of proposal 114 it is possible to combine a
  126. hidden service descriptor with a so-called descriptor cookie. If done so,
  127. the descriptor cookie becomes part of the descriptor ID, thus having an
  128. effect on the storage location of the descriptor. Someone who has learned
  129. about a service, but is not aware of the descriptor cookie, won't be able
  130. to determine the descriptor ID and download the current hidden service
  131. descriptor; he won't even know whether the service has uploaded a
  132. descriptor recently. Descriptor IDs are calculated as follows (see
  133. section 1.2 of rend-spec for the complete specification of v2 hidden
  134. service descriptors):
  135. descriptor-id =
  136. H(service-id | H(time-period | descriptor-cookie | replica))
  137. Currently, service-id is equivalent to permanent-id which is calculated
  138. as in the following formula. But in principle it could be any public
  139. key.
  140. permanent-id = H(permanent-key)[:10]
  141. The second purpose of the descriptor cookie is to encrypt the list of
  142. introduction points, including optional authorization data. Hence, the
  143. hidden service directories won't learn any introduction information from
  144. storing a hidden service descriptor. This feature is implemented but
  145. unused at the moment, so that this proposal will harness the advantages
  146. of proposal 114.
  147. The descriptor cookie can be used for authorization by keeping it secret
  148. from everyone but authorized clients. A service could then decide whether
  149. to publish hidden service descriptors using that descriptor cookie later
  150. on. An authorized client being aware of the descriptor cookie would be
  151. able to download and decrypt the hidden service descriptor.
  152. The number of concurrently used descriptor cookies for one hidden service
  153. is not restricted. A service could use a single descriptor cookie for all
  154. users, a distinct cookie per user, or something in between, like one
  155. cookie per group of users. It is up to the specific protocol and how it
  156. is applied by a service provider.
  157. Two or more hidden service descriptors for different groups or users
  158. should not be uploaded at the same time. A directory node could conclude
  159. easily that the descriptors, were issued by the same hidden service, thus
  160. being able to link the two groups or users. Therefore, descriptors for
  161. different users or clients that ought to be stored on the same directory
  162. are delayed, so that only one descriptor is uploaded to a directory at a
  163. time. The remaining descriptors are uploaded with a delay of 30 seconds.
  164. Further, descriptors for different groups or users that are to be stored
  165. on different directories are delayed for a random time of up to 30
  166. seconds to hide relations from colluding directories. Certainly, this
  167. does not prevent linking entirely, but it makes it somewhat harder.
  168. There is a conflict between hiding links between clients and making a
  169. service available in a timely manner.
  170. Although this part of the proposal is meant to describe a general
  171. infrastructure for authorization, changing the way of using the
  172. descriptor cookie to look up hidden service descriptors, e.g. applying
  173. some sort of asymmetric crypto system, would require in-depth changes
  174. that would be incompatible to v2 hidden service descriptors. On the
  175. contrary, using another key for en-/decrypting the introduction point
  176. part of a hidden service descriptor, e.g. a different symmetric key or
  177. asymmetric encryption, would be easy to implement and compatible to v2
  178. hidden service descriptors as understood by hidden service directories
  179. (clients and servers would have to be upgraded anyway for using the new
  180. features).
  181. An adversary could try to abuse the fact that introduction points can be
  182. encrypted by storing arbitrary, unrelated data in the hidden service
  183. directory. This abuse can be limited by setting a hard descriptor size
  184. limit, forcing the adversary to split data into multiple chunks. There
  185. are some limitations that make splitting data across multiple descriptors
  186. unattractive: 1) The adversary would not be able to choose descriptor IDs
  187. freely and have to implement an own indexing structure. 2) Validity of
  188. descriptors is limited to at most 24 hours after which descriptors need
  189. to be republished.
  190. The regular descriptor size in bytes is 745 + num_ipos * 837 + auth_data.
  191. A large descriptor with 7 introduction points and 5 kilobytes of
  192. authorization data would be 11724 bytes in size. The upper size limit of
  193. descriptors should be set to 20 kilobytes, which limits the effect of
  194. abuse while retaining enough flexibility in designing authorization
  195. protocols.
  196. 1.2. Client authorization at introduction point
  197. The next possible authorization point after downloading and decrypting
  198. a hidden service descriptor is the introduction point. It may be important
  199. for authorization, because it bears the last chance of hiding presence
  200. of a hidden service from unauthorized clients. Further, performing
  201. authorization at the introduction point might reduce traffic in the
  202. network, because unauthorized requests would not be passed to the
  203. hidden service. This applies to those clients who are aware of a
  204. descriptor cookie and thereby of the hidden service descriptor, but do
  205. not have authorization data to pass the introduction point or access the
  206. service (such a situation might occur when authorization data for
  207. authorization at the directory is not issued on a per-user base as
  208. opposed to authorization data for authorization at the introduction
  209. point).
  210. It is important to note that the introduction point must be considered
  211. untrustworthy, and therefore cannot replace authorization at the hidden
  212. service itself. Nor should the introduction point learn any sensitive
  213. identifiable information from either server or client.
  214. In order to perform authorization at the introduction point, three
  215. message formats need to be modified: (1) v2 hidden service descriptors,
  216. (2) ESTABLISH_INTRO cells, and (3) INTRODUCE1 cells.
  217. A v2 hidden service descriptor needs to contain authorization data that
  218. is introduction-point-specific and sometimes also authorization data
  219. that is introduction-point-independent. Therefore, v2 hidden service
  220. descriptors as specified in section 1.2 of rend-spec already contain two
  221. reserved fields "intro-authorization" and "service-authorization"
  222. (originally, the names of these fields were "...-authentication")
  223. containing an authorization type number and arbitrary authorization
  224. data. We propose that authorization data consists of base64 encoded
  225. objects of arbitrary length, surrounded by "-----BEGIN MESSAGE-----" and
  226. "-----END MESSAGE-----". This will increase the size of hidden service
  227. descriptors, which however is possible, as there is no strict upper
  228. limit.
  229. The current ESTABLISH_INTRO cells as described in section 1.3 of
  230. rend-spec do not contain either authorization data or version
  231. information. Therefore, we propose a new version 1 of the ESTABLISH_INTRO
  232. cells adding these two issues as follows:
  233. V Format byte: set to 255 [1 octet]
  234. V Version byte: set to 1 [1 octet]
  235. KL Key length [2 octets]
  236. PK Bob's public key [KL octets]
  237. HS Hash of session info [20 octets]
  238. AUTHT The auth type that is supported [1 octet]
  239. AUTHL Length of auth data [2 octets]
  240. AUTHD Auth data [variable]
  241. SIG Signature of above information [variable]
  242. From the format it is possible to determine the maximum allowed size for
  243. authorization data: given the fact that cells are 512 octets long, of
  244. which 498 octets are usable (see section 6.1 of tor-spec), and assuming
  245. 1024 bit = 128 octet long keys, there are 215 octets left for
  246. authorization data. Hence, authorization protocols are bound to use no
  247. more than these 215 octets, regardless of the number of clients that
  248. shall be authenticated at the introduction point. Otherwise, one would
  249. need to send multiple ESTABLISH_INTRO cells or split them up, what we do
  250. not specify here.
  251. In order to understand a v1 ESTABLISH_INTRO cell, the implementation of
  252. a relay must have a certain Tor version. Hidden services need to be able
  253. to distinguish relays being capable of understanding the new v1 cell
  254. formats and perform authorization. We propose to use the version number
  255. that is contained in networkstatus documents to find capable
  256. introduction points.
  257. The current INTRODUCE1 cells as described in section 1.8 of rend-spec is
  258. not designed to carry authorization data and has no version number, too.
  259. Unfortunately, unversioned INTRODUCE1 cells consist only of a fixed-size,
  260. seemingly random PK_ID, followed by the encrypted INTRODUCE2 cell. This
  261. makes it impossible to distinguish unversioned INTRODUCE1 cells from any
  262. later format. In particular, it is not possible to introduce some kind of
  263. format and version byte for newer versions of this cell. That's probably
  264. where the comment "[XXX011 want to put intro-level auth info here, but no
  265. version. crap. -RD]" that was part of rend-spec some time ago comes from.
  266. We propose that new versioned INTRODUCE1 cells use the new cell type 41
  267. RELAY_INTRODUCE1V (where V stands for versioned):
  268. Cleartext
  269. V Version byte: set to 1 [1 octet]
  270. PK_ID Identifier for Bob's PK [20 octets]
  271. AUTHT The auth type that is supported [1 octet]
  272. AUTHL Length of auth data [2 octets]
  273. AUTHD Auth data [variable]
  274. Encrypted to Bob's PK:
  275. (RELAY_INTRODUCE2 cell)
  276. The maximum length of contained authorization data depends on the length
  277. of the contained INTRODUCE2 cell. A calculation follows below when
  278. describing the INTRODUCE2 cell format we propose to use.
  279. 1.3. Client authorization at hidden service
  280. The time when a hidden service receives an INTRODUCE2 cell constitutes
  281. the last possible authorization point during the hidden service
  282. protocol. Performing authorization here is easier than at the other two
  283. authorization points, because there are no possibly untrusted entities
  284. involved.
  285. In general, a client that is successfully authorized at the introduction
  286. point should be granted access at the hidden service, too. Otherwise, the
  287. client would receive a positive INTRODUCE_ACK cell from the introduction
  288. point and conclude that it may connect to the service, but the request
  289. will be dropped without notice. This would appear as a failure to
  290. clients. Therefore, the number of cases in which a client successfully
  291. passes the introduction point, but fails at the hidden service should be
  292. zero. However, this does not lead to the conclusion, that the
  293. authorization data used at the introduction point and the hidden service
  294. must be the same, but only that both authorization data should lead to
  295. the same authorization result.
  296. Authorization data is transmitted from client to server via an
  297. INTRODUCE2 cell that is forwarded by the introduction point. There are
  298. versions 0 to 2 specified in section 1.8 of rend-spec, but none of these
  299. contains fields for carrying authorization data. We propose a slightly
  300. modified version of v3 INTRODUCE2 cells that is specified in section
  301. 1.8.1 and which is not implemented as of December 2007. In contrast to
  302. the specified v3 we avoid specifying (and implementing) IPv6 capabilities,
  303. because Tor relays will be required to support IPv4 addresses for a long
  304. time in the future, so that this seems unnecessary at the moment. The
  305. proposed format of v3 INTRODUCE2 cells is as follows:
  306. VER Version byte: set to 3. [1 octet]
  307. AUTHT The auth type that is used [1 octet]
  308. AUTHL Length of auth data [2 octets]
  309. AUTHD Auth data [variable]
  310. TS Timestamp (seconds since 1-1-1970) [4 octets]
  311. IP Rendezvous point's address [4 octets]
  312. PORT Rendezvous point's OR port [2 octets]
  313. ID Rendezvous point identity ID [20 octets]
  314. KLEN Length of onion key [2 octets]
  315. KEY Rendezvous point onion key [KLEN octets]
  316. RC Rendezvous cookie [20 octets]
  317. g^x Diffie-Hellman data, part 1 [128 octets]
  318. The maximum possible length of authorization data is related to the
  319. enclosing INTRODUCE1V cell. A v3 INTRODUCE2 cell with
  320. 1024 bit = 128 octets long public keys without any authorization data
  321. occupies 306 octets (AUTHL is only used when AUTHT has a value != 0),
  322. plus 58 octets for hybrid public key encryption (see
  323. section 5.1 of tor-spec on hybrid encryption of CREATE cells). The
  324. surrounding INTRODUCE1V cell requires 24 octets. This leaves only 110
  325. of the 498 available octets free, which must be shared between
  326. authorization data to the introduction point _and_ to the hidden
  327. service.
  328. When receiving a v3 INTRODUCE2 cell, Bob checks whether a client has
  329. provided valid authorization data to him. He also requires that the
  330. timestamp is no more than 30 minutes in the past or future and that the
  331. rendezvous cookie has not been used in the past 60 minutes to prevent
  332. replay attacks by rogue introduction points. If all checks pass, Bob
  333. builds a circuit to the provided rendezvous point and otherwise drops the
  334. cell.
  335. 1.4. Summary of authorization data fields
  336. In summary, the proposed descriptor format and cell formats provide the
  337. following fields for carrying authorization data:
  338. (1) The v2 hidden service descriptor contains:
  339. - a descriptor cookie that is used for the lookup process, and
  340. - an arbitrary encryption schema to ensure authorization to access
  341. introduction information (currently symmetric encryption with the
  342. descriptor cookie).
  343. (2) For performing authorization at the introduction point we can use:
  344. - the fields intro-authorization and service-authorization in
  345. hidden service descriptors,
  346. - a maximum of 215 octets in the ESTABLISH_INTRO cell, and
  347. - one part of 110 octets in the INTRODUCE1V cell.
  348. (3) For performing authorization at the hidden service we can use:
  349. - the fields intro-authorization and service-authorization in
  350. hidden service descriptors,
  351. - the other part of 110 octets in the INTRODUCE2 cell.
  352. It will also still be possible to access a hidden service without any
  353. authorization or only use a part of the authorization infrastructure.
  354. However, this requires to consider all parts of the infrastructure. For
  355. example, authorization at the introduction point relying on confidential
  356. intro-authorization data transported in the hidden service descriptor
  357. cannot be performed without using an encryption schema for introduction
  358. information.
  359. 1.5. Managing authorization data at servers and clients
  360. In order to provide authorization data at the hidden server and the
  361. authenticated clients, we propose to use files---either the tor
  362. configuration file or separate files. The exact format of these special
  363. files depends on the authorization protocol used.
  364. Currently, rend-spec contains the proposition to encode client-side
  365. authorization data in the URL, like in x.y.z.onion. This was never used
  366. and is also a bad idea, because in case of HTTP the requested URL may be
  367. contained in the Host and Referer fields.
  368. 1.6. Limitations for authorization protocols
  369. There are two limitations of the current hidden service protocol for
  370. authorization protocols that shall be identified here.
  371. 1. The three cell types ESTABLISH_INTRO, INTRODUCE1V, and INTRODUCE2
  372. restricts the amount of data that can be used for authorization.
  373. This forces authorization protocols that require per-user
  374. authorization data at the introduction point to restrict the number
  375. of authorized clients artifically. A possible solution could be to
  376. split contents among multiple cells and reassemble them at the
  377. introduction points.
  378. 2. The current hidden service protocol does not specify cell types to
  379. perform interactive authorization between client and introduction
  380. point or hidden service. If there should be an authorization
  381. protocol that requires interaction, new cell types would have to be
  382. defined and integrated into the hidden service protocol.
  383. 2. Specific authorization protocol instances
  384. In the following we present three specific authorization protocols that
  385. make use of (parts of) the new authorization infrastructure:
  386. 1. The first protocol does not really perform client authorization, but
  387. requires clients to have downloaded a service descriptor before
  388. establishing a connection in order to prevent introduction points
  389. from accessing a service.
  390. 2. The second protocol allows a service provider to restrict access
  391. to clients with a previously received secret key only, but does not
  392. attempt to hide service activity from others.
  393. 3. The third protocol, albeit being feasible for a limited set of about
  394. 16 clients, performs client authorization and hides service activity
  395. from everyone but the authorized clients.
  396. These three protocol instances together are intended to replace the
  397. existing hidden service protocol versions 0 and 2 in the long run and
  398. shall therefore be considered hidden service protocol version 3. All
  399. changes in this version 3 are designed to be fully backward-compatible to
  400. version 2 and can be run in parallel to version 0.
  401. 2.1. Services without client authorization
  402. Although hidden services without client authorization could be run as
  403. before, this proposal allows us to add a new security property at almost
  404. no costs: Denying the introduction points to access the hidden service.
  405. While this constitutes a defense against rogue introduction points, it
  406. also reduces responsibility of a Tor node operator for the doings of a
  407. hidden service offering illegal or unethical contents.
  408. The original hidden service design used the service's permanent key to
  409. establish introduction points. If an introduction point wanted to access
  410. the service, it could easily download the service's descriptor using its
  411. permanent key ID and establish a connection or generate an INTRODUCE2
  412. cell itself and forward it directly to the service.
  413. Hidden service protocol version 2 made it more difficult for introduction
  414. points to find out which service they are serving. Here, the hidden
  415. service created a fresh introduction key for each introduction point
  416. which 1) did not reveal the hidden service's identity and 2) did not
  417. allow downloading the service's descriptor. However, the introduction
  418. point could still generate an INTRODUCE2 cell itself and establish a
  419. connection to the service to find out what it is serving.
  420. Beginning with this proposal can include a so-called "introduction
  421. cookie" in v2 hidden service descriptors and v3 INTRODUCE2 cells. If
  422. both, service and client implement this proposal, a service receiving a
  423. v3 INTRODUCE2 cell with an introduction cookie in it can be sure that the
  424. client has downloaded its descriptor before. As long as hidden services
  425. also permit v2 INTRODUCE2 cells, introduction points can work around this
  426. safeguard. But the earlier this protocol is introduced, the earlier the
  427. services can stop supporting version 2 introductions.
  428. A hidden service generates a unique introduction cookie for each
  429. established introduction point and puts it in the "intro-authentication"
  430. field in its descriptor for auth-type "1". Further, the service sets the
  431. "protocol-versions" field to "2,3" to announce that it understands both,
  432. requests with and without introduction cookie. Clients that understand
  433. protocol version 3 include the introduction cookie in the v3 INTRODUCE2
  434. cell as auth-type "1" that they send to the service. (Clients that don't
  435. understand the protocol v3 do not recognize the authorization data and
  436. send a v2 INTRODUCE2 cell as usual.) The hidden service can compare a
  437. received introduction cookie with the value that it expects and grant or
  438. deny service correspondingly.
  439. 2.2. Service with large-scale client authorization
  440. The first client authorization protocol aims at performing access control
  441. while consuming as little additional resources as possible. A service
  442. provider should be able to permit access to a large number of clients
  443. while denying access for everyone else. However, the price for
  444. scalability is that the service won't be able to hide its activity from
  445. unauthorized or formerly authorized clients.
  446. The main idea of this protocol is to encrypt the introduction-point part
  447. in hidden service descriptors to authorized clients using symmetric keys.
  448. This ensures that nobody else but authorized clients can learn which
  449. introduction points a service currently uses, nor can someone send a
  450. valid INTRODUCE1 message without knowing the introduction key. Therefore,
  451. a subsequent authorization at the introduction point is not required.
  452. A service provider generates symmetric "descriptor cookies" for his
  453. clients and distributes them outside of Tor. The suggested key size is
  454. 128 bits, so that descriptor cookies can be encoded in 22 base64 chars
  455. (which can hold up to 22 * 5 = 132 bits, leaving 4 bits to encode the
  456. authorization type "2" and allow a client to distinguish this
  457. authorization protocol from others like the one proposed below).
  458. Typically, the contact information for a hidden service using this
  459. authorization protocol looks like this:
  460. v2cbb2l4lsnpio4q.onion Ll3X7Xgz9eHGKCCnlFH0uz
  461. When generating a hidden service descriptor, the service encrypts the
  462. introduction-point part with a single randomly generated symmetric
  463. 128-bit session key using AES-CTR as described for v2 hidden service
  464. descriptors in rend-spec. Afterwards, the service encrypts the session
  465. key to all descriptor cookies using AES.
  466. ### What would be a simple solution to include n encrypted session keys
  467. ### in the descriptor? The format may be binary and has no strict upper
  468. ### size limit. An authorized client should be able to efficiently find
  469. ### the session key that is encrypted for him/her. It should be
  470. ### impossible to track certain authorized clients over time by finding
  471. ### that the session key was encrypted for them in different descriptors.
  472. ### It should be hard to determine the exact number of authorized
  473. ### clients.
  474. ###
  475. ### Here comes the voodoo I've conceived:
  476. ###
  477. ### ATYPE Authorization type: set to 2. [1 octet]
  478. ### ALEN Number of authorized clients div 16 [1 octet]
  479. ### for each symmetric descriptor cookie:
  480. ### ID Client ID: H(descriptor cookie | IV)[:4] [4 octets]
  481. ### SKEY Session key encrypted with descriptor cookie [16 octets]
  482. ### (end of client-specific part)
  483. ### RND Random data [(16 - (number-of-clients mod 16)) * 20 octets]
  484. ### IV AES initialization vector [16 octets]
  485. ### IPOS Intro points, encrypted with session key [remaining octets]
  486. An authorized client needs to configure Tor to use the descriptor cookie
  487. when accessing the hidden service. Therefore, a user adds the contact
  488. information that she received from the service provider to her torrc
  489. file. Upon downloading a hidden service descriptor, Tor finds the
  490. encrypted introduction-point part and attempts to decrypt it using the
  491. configured descriptor cookie. (In the rare event of two or more client
  492. IDs being equal a client tries to decrypt all of them.)
  493. Upon sending the introduction, the client includes her descriptor cookie
  494. as auth type "2" in the INTRODUCE2 cell that she sends to the service.
  495. The hidden service checks whether the included descriptor cookie is
  496. authorized to access the service and either responds to the introduction
  497. request, or not.
  498. 2.3. Authorization for limited number of clients
  499. A second, more sophisticated client authorization protocol goes the extra
  500. mile of hiding service activity from unauthorized clients. With all else
  501. being equal to the preceding authorization protocol, the second protocol
  502. publishes hidden service descriptors for each user separately and gets
  503. along with encrypting the introduction-point part of descriptors to a
  504. single client. This allows the service to stop publishing descriptors for
  505. removed clients. As long as a removed client cannot link descriptors
  506. issued for other clients to the service, it cannot derive service
  507. activity any more. The downside of this approach is limited scalability.
  508. Even though the distributed storage of descriptors (cf. proposal 114)
  509. tackles the problem of limited scalability to a certain extent, this
  510. protocol should not be used for services with more than 16 clients. (In
  511. fact, Tor should refuse to advertise services for more than this number
  512. of clients.)
  513. A hidden service generates an asymmetric "client key" and a symmetric
  514. "descriptor cookie" for each client. The client key is used as
  515. replacement for the service's permanent key, so that the service uses a
  516. different identity for each of his clients. The descriptor cookie is used
  517. to store descriptors at changing directory nodes that are unpredictable
  518. for anyone but service and client, to encrypt the introduction-point
  519. part, and to be included in INTRODUCE2 cells. Once the service has
  520. created client key and descriptor cookie, he tells them to the client
  521. outside of Tor. The contact information string looks similar to the one
  522. used by the preceding authorization protocol (with the only difference
  523. that it has "3" encoded as auth-type in the remaining 4 of 132 bits
  524. instead of "2" as before).
  525. When creating a hidden service descriptor for an authorized client, the
  526. hidden service uses the client key and descriptor cookie to compute
  527. secret ID part and descriptor ID:
  528. secret-id-part = H(time-period | descriptor-cookie | replica)
  529. descriptor-id = H(client-key[:10] | secret-id-part)
  530. The hidden service also replaces permanent-key in the descriptor with
  531. client-key and encrypts introduction-points with the descriptor cookie.
  532. ATYPE Authorization type: set to 3. [1 octet]
  533. IV AES initialization vector [16 octets]
  534. IPOS Intro points, encr. with descriptor cookie [remaining octets]
  535. When uploading descriptors, the hidden service needs to make sure that
  536. descriptors for different clients are not uploaded at the same time (cf.
  537. Section 1.1) which is also a limiting factor for the number of clients.
  538. When a client is requested to establish a connection to a hidden service
  539. it looks up whether it has any authorization data configured for that
  540. service. If the user has configured authorization data for authorization
  541. protocol "3", the descriptor ID is determined as described in the last
  542. paragraph. Upon receiving a descriptor, the client decrypts the
  543. introduction-point part using its descriptor cookie. Further, the client
  544. includes its descriptor cookie as auth-type "3" in INTRODUCE2 cells that
  545. it sends to the service.
  546. 2.4. Hidden service configuration
  547. A hidden service that implements this proposal and that is meant to use
  548. the new protocols (including the protocol without client authorization as
  549. described in 2.1) adds version 3 to the list of supported hidden service
  550. protocols:
  551. HiddenServiceVersion version,version,... (Default: 0, 2, 3)
  552. If the service shall perform client authorization, another config option
  553. is set to either "1" for the protocol described in 2.2 or "2" for the
  554. protocol in 2.3 (auth type numbers differ from the internally used
  555. numbers primarily to avoid user questions about the whereabouts of auth
  556. type 1). This config option also includes a comma-separated list of
  557. human-readable client names, so that Tor can create authorization data
  558. for these clients:
  559. HiddenServiceAuthorizeClient auth-type client-name,client-name,...
  560. If this option is configured, HiddenServiceVersion is automatically
  561. reconfigured to contain only version numbers of 3 or higher. If this
  562. config option is not set but the configured hidden service version
  563. includes 3, the protocol without client authorization as described in 2.1
  564. is offered to clients (possibly in parallel to versions 0 and 2).
  565. Tor stores all generated authorization data for the authorization
  566. protocols described in Sections 2.2 and 2.3 in a new file using the
  567. following file format:
  568. "client-name" human-readable client identifier NL
  569. "descriptor-cookie" 128-bit key ^= 22 base64 chars NL
  570. If the authorization protocol of Section 2.3 is used, Tor also generates
  571. and stores the following data:
  572. "service-address" client-specific-onion-address NL
  573. "client-key" NL a public key in PEM format
  574. 2.5. Client configuration
  575. Clients need to make their authorization data known to Tor using another
  576. configuration option that contains a service name (mainly for the sake of
  577. convenience), the service address, and the descriptor cookie that is
  578. required to access a hidden service (the authorization protocol number is
  579. encoded in the descriptor cookie):
  580. HidServAuth service-name service-address descriptor-cookie
  581. Security implications:
  582. In the following we want to discuss possible attacks by dishonest
  583. entities in the presented infrastructure and specific protocol. These
  584. security implications would have to be verified once more when adding
  585. another protocol. The dishonest entities (theoretically) include the
  586. hidden server itself, the authenticated clients, hidden service directory
  587. nodes, introduction points, and rendezvous points. The relays that are
  588. part of circuits used during protocol execution, but never learn about
  589. the exchanged descriptors or cells by design, are not considered.
  590. Obviously, this list makes no claim to be complete. The discussed attacks
  591. are sorted by the difficulty to perform them, in ascending order,
  592. starting with roles that everyone could attempt to take and ending with
  593. partially trusted entities abusing the trust put in them.
  594. (1) A hidden service directory could attempt to conclude presence of a
  595. server from the existence of a locally stored hidden service descriptor:
  596. This passive attack is possible only for a single client-service
  597. relation, because descriptors need to contain a
  598. publicly visible signature of the server using the client key
  599. A possible protection
  600. would be to increase the number of hidden service directories in the
  601. network.
  602. (2) A hidden service directory could try to break the descriptor cookies
  603. of locally stored descriptors: This attack can be performed offline. The
  604. only useful countermeasure against it might be using safe passwords that
  605. are generated by Tor.
  606. (3) An introduction point could try to identify the pseudonym of the
  607. hidden service on behalf of which it operates: This is impossible by
  608. design, because the service uses a fresh public key for every
  609. establishment of an introduction point (see proposal 114) and the
  610. introduction point receives a fresh introduction cookie, so that there is
  611. no identifiable information about the service that the introduction point
  612. could learn. The introduction point cannot even tell if client accesses
  613. belong to the same client or not, nor can it know the total number of
  614. authorized clients. The only information might be the pattern of
  615. anonymous client accesses, but that is hardly enough to reliably identify
  616. a specific service.
  617. (4) An introduction point could want to learn the identities of accessing
  618. clients: This is also impossible by design, because all clients use the
  619. same introduction cookie for authorization at the introduction point.
  620. (5) An introduction point could try to replay a correct INTRODUCE1 cell
  621. to other introduction points of the same service, e.g. in order to force
  622. the service to create a huge number of useless circuits: This attack is
  623. not possible by design, because INTRODUCE1 cells are encrypted using a
  624. freshly created introduction key that is only known to authorized
  625. clients.
  626. (6) An introduction point could attempt to replay a correct INTRODUCE2
  627. cell to the hidden service, e.g. for the same reason as in the last
  628. attack: This attack is very limited by the fact that a server will only
  629. accept 3 INTRODUCE2 cells containing the same rendezvous cookie and drop
  630. all further replayed cells.
  631. (7) An introduction point could block client requests by sending either
  632. positive or negative INTRODUCE_ACK cells back to the client, but without
  633. forwarding INTRODUCE2 cells to the server: This attack is an annoyance
  634. for clients, because they might wait for a timeout to elapse until trying
  635. another introduction point. However, this attack is not introduced by
  636. performing authorization and it cannot be targeted towards a specific
  637. client. A countermeasure might be for the server to periodically perform
  638. introduction requests to his own service to see if introduction points
  639. are working correctly.
  640. (8) The rendezvous point could attempt to identify either server or
  641. client: This remains impossible as it was before, because the
  642. rendezvous cookie does not contain any identifiable information.
  643. (9) An authenticated client could swamp the server with valid INTRODUCE1
  644. and INTRODUCE2 cells, e.g. in order to force the service to create
  645. useless circuits to rendezvous points; as opposed to an introduction
  646. point replaying the same INTRODUCE2 cell, a client could include a new
  647. rendezvous cookie for every request: The countermeasure for this attack
  648. is the restriction to 10 connection establishments per client and hour.
  649. Compatibility:
  650. An implementation of this proposal would require changes to hidden
  651. servers and clients to process authorization data and encode and
  652. understand the new formats. However, both servers and clients would
  653. remain compatible to regular hidden services without authorization.
  654. Implementation:
  655. The implementation of this proposal can be divided into a number of
  656. changes to hidden service and client side. There are no
  657. changes necessary on directory, introduction, or rendezvous nodes. All
  658. changes are marked with either [service] or [client] do denote on which
  659. side they need to be made.
  660. /1/ Configure client authorization [service]
  661. - Parse configuration option HiddenServiceAuthorizeClient containing
  662. authorized client names.
  663. - Load previously created client keys and descriptor cookies.
  664. - Generate missing client keys and descriptor cookies, add them to
  665. client_keys file.
  666. - Rewrite the hostname file.
  667. - Keep client keys and descriptor cookies of authorized clients in
  668. memory.
  669. [- In case of reconfiguration, mark which client authorizations were
  670. added and whether any were removed. This can be used later when
  671. deciding whether to rebuild introduction points and publish new
  672. hidden service descriptors. Not implemented yet.]
  673. /2/ Publish hidden service descriptors [service]
  674. - Create and upload hidden service descriptors for all authorized
  675. clients.
  676. [- See /1/ for the case of reconfiguration.]
  677. /3/ Configure permission for hidden services [client]
  678. - Parse configuration option HidServAuth containing service
  679. authorization, store authorization data in memory.
  680. /5/ Fetch hidden service descriptors [client]
  681. - Look up client authorization upon receiving a hidden service request.
  682. - Request hidden service descriptor ID including client key and
  683. descriptor cookie. Only request v2 descriptors, no v0.
  684. /6/ Process hidden service descriptor [client]
  685. - Decrypt introduction points with descriptor cookie.
  686. /7/ Create introduction request [client]
  687. - Include descriptor cookie in INTRODUCE2 cell to introduction point.
  688. - Pass descriptor cookie around between involved connections and
  689. circuits.
  690. /8/ Process introduction request [service]
  691. - Read descriptor cookie from INTRODUCE2 cell.
  692. - Check whether descriptor cookie is authorized for access, including
  693. checking access counters.
  694. - Log access for accountability.