136-legacy-keys.txt 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. Filename: 136-legacy-keys.txt
  2. Title: Mass authority migration with legacy keys
  3. Author: Nick Mathewson
  4. Created: 13-May-2008
  5. Status: Closed
  6. Implemented-In: 0.2.0.x
  7. Overview:
  8. This document describes a mechanism to change the keys of more than
  9. half of the directory servers at once without breaking old clients
  10. and caches immediately.
  11. Motivation:
  12. If a single authority's identity key is believed to be compromised,
  13. the solution is obvious: remove that authority from the list,
  14. generate a new certificate, and treat the new cert as belonging to a
  15. new authority. This approach works fine so long as less than 1/2 of
  16. the authority identity keys are bad.
  17. Unfortunately, the mass-compromise case is possible if there is a
  18. sufficiently bad bug in Tor or in any OS used by a majority of v3
  19. authorities. Let's be prepared for it!
  20. We could simply stop using the old keys and start using new ones,
  21. and tell all clients running insecure versions to upgrade.
  22. Unfortunately, this breaks our cacheing system pretty badly, since
  23. caches won't cache a consensus that they don't believe in. It would
  24. be nice to have everybody become secure the moment they upgrade to a
  25. version listing the new authority keys, _without_ breaking upgraded
  26. clients until the caches upgrade.
  27. So, let's come up with a way to provide a time window where the
  28. consensuses are signed with the new keys and with the old.
  29. Design:
  30. We allow directory authorities to list a single "legacy key"
  31. fingerprint in their votes. Each authority may add a single legacy
  32. key. The format for this line is:
  33. legacy-dir-key FINGERPRINT
  34. We describe a new consensus method for generating directory
  35. consensuses. This method is consensus method "3".
  36. When the authorities decide to use method "3" (as described in 3.4.1
  37. of dir-spec.txt), for every included vote with a legacy-dir-key line,
  38. the consensus includes an extra dir-source line. The fingerprint in
  39. this extra line is as in the legacy-dir-key line. The ports and
  40. addresses are in the dir-source line. The nickname is as in the
  41. dir-source line, with the string "-legacy" appended.
  42. [We need to include this new dir-source line because the code
  43. won't accept or preserve signatures from authorities not listed
  44. as contributing to the consensus.]
  45. Authorities using legacy dir keys include two signatures on their
  46. consensuses: one generated with a signing key signed with their real
  47. signing key, and another generated with a signing key signed with
  48. another signing key attested to by their identity key. These
  49. signing keys MUST be different. Authorities MUST serve both
  50. certificates if asked.
  51. Process:
  52. In the event of a mass key failure, we'll follow the following
  53. (ugly) procedure:
  54. - All affected authorities generate new certificates and identity
  55. keys, and circulate their new dirserver lines. They copy their old
  56. certificates and old broken keys, but put them in new "legacy
  57. key files".
  58. - At the earliest time that can be arranged, the authorities
  59. replace their signing keys, identity keys, and certificates
  60. with the new uncompromised versions, and update to the new list
  61. of dirserer lines.
  62. - They add an "V3DirAdvertiseLegacyKey 1" option to their torrc.
  63. - Now, new consensuses will be generated using the new keys, but
  64. the results will also be signed with the old keys.
  65. - Clients and caches are told they need to upgrade, and given a
  66. time window to do so.
  67. - At the end of the time window, authorities remove the
  68. V3DirAdvertiseLegacyKey option.
  69. Notes:
  70. It might be good to get caches to cache consensuses that they do not
  71. believe in. I'm not sure the best way of how to do this.
  72. It's a superficially neat idea to have new signing keys and have
  73. them signed by the new and by the old authority identity keys. This
  74. breaks some code, though, and doesn't actually gain us anything,
  75. since we'd still need to include each signature twice.
  76. It's also a superficially neat idea, if identity keys and signing
  77. keys are compromised, to at least replace all the signing keys.
  78. I don't think this achieves us anything either, though.