summaryrefslogtreecommitdiff
path: root/doc/MonkeySpec
blob: b0a0d6a10d203f81141d5ed5a059234d97928db7 (plain)
  1. THE MONKEYSPHERE
  2. ================
  3. AGENDA
  4. ======
  5. [x] clowning
  6. [ ] work
  7. [x] jrollins will talk and gesture - in progress
  8. MONKEYNAMES
  9. ===========
  10. rhesus, marmoset, howler, langur, tamarin, barbary
  11. COMPONENTS
  12. ==========
  13. (names in "" are code names until we think of better ones.)
  14. common components
  15. -----------------
  16. * "rhesus": update known_hosts/authorized_keys files:
  17. - be responsible for removing keys from the file as key revocation
  18. happens
  19. - be responsible for updating a key in the file where there is a key
  20. replacement
  21. - must result in a file that is parsable by the existing ssh client
  22. without errors
  23. - manual management must be allowed without stomping on it
  24. - provide a simple, intelligible, clear policy for key acceptance
  25. * "langur": policy-editor for viewing/editing policies
  26. * gpg2ssh: utility to convert gpg keys to ssh
  27. known_hosts/authorized_keys lines
  28. * ssh2gpg: create openpgp keypair from ssh keypair
  29. server-side components
  30. ----------------------
  31. * "howler": server gpg maintainer
  32. - generates gpg keys for the server
  33. - publishes server gpg keys
  34. - used to specify userids to trust for user authentication
  35. * "tamarin": script to trigger rhesus during attempt to initiate
  36. connection from client
  37. client-side components
  38. ----------------------
  39. * "marmoset": script to trigger rhesus during attempt to initiate
  40. connection to server
  41. - runs on connection to a certain host
  42. - triggers update to known_hosts file then makes connection
  43. - proxy-command | pre-hook script | wrapper script
  44. - (ssh_config "LocalCommand" is only run *after* connection)
  45. USE CASE
  46. ========
  47. Dramatis Personae: http://en.wikipedia.org/wiki/Alice_and_Bob
  48. Backstory: http://www.conceptlabs.co.uk/alicebob.html
  49. Bob wants to sign on to the computer "mangabey.example.org" via
  50. monkeysphere framework. He doesn't yet have access to the machine,
  51. but he knows Alice, who is the admin of magabey. Alice and Bob, being
  52. the conscientious netizens that they are, have already published their
  53. personal gpg keys to the web of trust, and being good friends, have
  54. both signed each other's keys and marked each others keys with "full"
  55. trust.
  56. Alice uses howler to publish a gpg key for magabey with the special
  57. userid of "ssh://mangabey.example.org". Alice signs mangabey's gpg
  58. key and publishes this signature as a certification. Alice then
  59. creates a user "bob" on mangabey, and puts Bob's userid in the
  60. auth_user_ids file for user bob on magabey. tamarin triggers on
  61. mangabey, which invokes rhesus. rhesus takes all userids in bob's
  62. auth_user_ids file, looks on a keyserver to find the public keys for
  63. each user, converts the gpg public keys into ssh public keys if the
  64. key validity is acceptable, and finally inserts those keys into an
  65. authorized_keys file for bob.
  66. Bob now adds the "ssh://mangabey.example.org" userid to the
  67. auth_host_ids file in his account on his localhost. Bob now goes to
  68. connect to bob@mangabey.example.org. Bob's monkeysphere-enabled ssh
  69. client triggers marmoset, which invokes rhesus on Bob's computer.
  70. rhesus takes all server userids in his auth_host_ids file, looks on a
  71. keyserver to find the public key for each server (based on the
  72. server's URI), converts the gpg public keys into ssh public keys if
  73. the key validity is acceptable, and finally insert those keys into
  74. Bob's known_hosts file.
  75. On Bob's side, since mangabey's key had "full" validity (since it was
  76. signed by Alice whom he fully trusts), Bob's ssh client deems mangabey
  77. "known" and no further host key checking is required.
  78. On mangabey's side, since Bob's key has "full" validity (since it had
  79. also been signed by Alice, mangabey's trusted administrator), Bob is
  80. authenticated and authorized to log into bob@mangabey.
  81. NOTES
  82. =====
  83. * Daniel and Elliot lie. <check>
  84. * We will use a distributed VCS, each developer will create their own
  85. git repository and publish it publicly for others to pull from, mail
  86. out
  87. * public project page doesn't perhaps make sense yet
  88. * approximate goal - using the web of trust to authenticate ppl for
  89. SSH
  90. * outline of various components of monkeysphere
  91. * M: what does it mean to be in the monkeysphere? not necessarily a
  92. great coder.
  93. * J: interested in seeing project happen, not in actually doing it.
  94. anybody can contribute as much as they want.
  95. * J: if we put the structure in place to work on monkeysphere then we
  96. don't have to do anything
  97. * D: we are not creating
  98. * understand gpg's keyring better, understanding tools better,
  99. building scripts
  100. * Some debian packages allow automated configuration of config files.
  101. * GENERAL GOAL - use openpgp web-of-trust to authenticate ppl for SSH
  102. * SPECIFIC GOAL - allow openssh to tie into pgp web-of-trust without
  103. modifying either openpgp and openssh
  104. * DESIGN GOALS - authentication, use the existing generic OpenSSH
  105. client, the admin can make it default, although end-user should be
  106. decide to use monkeysphere or not
  107. * DESIGN GOAL - use of monkeysphere should not radically change
  108. connecting-to-server experience
  109. * GOAL - pick a monkey-related name for each component
  110. Host identity piece of monkeysphere could be used without buying into
  111. the authorization component.
  112. Monkeysphere is authentication layer that allows the sysadmin to
  113. perform authorization on user identities instead of on keys, it
  114. additionally allows the sysadmin also to authenticate the server to
  115. the end-user.
  116. see doc/git-init for more detail on how to pull from the distributed
  117. repositories.