SECURITY 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. ***
  2. All cryptographic software in this package is subject to the following legal
  3. notice:
  4. This package includes publicly available encryption source code which,
  5. together with object code resulting from the compiling of publicly
  6. available source code, may be exported from the United States under License
  7. Exception TSU prsuant to 15 C.F.R Section 740.13(e).
  8. ***
  9. Security Design of corosync
  10. The corosync project intends to mitigate the following threats:
  11. 1. forged group messaging messages which are intended to fault the corosync
  12. executive
  13. 2. forged group messaging messages which are intended to fault applications
  14. using corosync apis
  15. 3. monitoring of network data to capture sensitive information
  16. The corosync project does not intend to mitigate the following threats:
  17. 1. physical access to the hardware which could expose the private key
  18. 2. privledged access to the operating system which could expose the private key
  19. or be used to inject errors into the ais executive.
  20. 3. library user creates requests which are intended to fault the corosync
  21. executive
  22. The corosync project mitigates the threats using two mechanisms:
  23. 1. Authentication
  24. 2. Secrecy
  25. Library Interface
  26. -----------------
  27. The corosync executive authenticates every library user. The library is only
  28. allowed to access services if it's GID is ais or 0. Unauthorized library
  29. users are rejected.
  30. The ais group is a trusted group. If the administrator doesn't trust the
  31. application, it should not be added to the group! Any member of the ais group
  32. could potentially send a malformed request to the executive and cause it to
  33. fault.
  34. Group Messaging Interface
  35. -------------------------
  36. Group messaging uses UDP/IP to communicate with other corosync executives using
  37. messages. It is possible without authentication of every packet that an
  38. attacker could forge messages. These forged messages could fault the corosync
  39. executive distributed state machines. It would also be possible to corrupt
  40. end applications by forging changes.
  41. Since messages are sent using UDP/IP it would be possible to snoop those
  42. messages and rebuild sensitive data.
  43. To solve these problems, the group messaging interface uses two new interfaces
  44. interal to it's implementation:
  45. 1. encrypt_and_sign - encrypts and signs a message securely
  46. 2. authenticate_and_decrypt - authenticates and decrypts a message securely
  47. When the executive wants to send a message over the network, it uses
  48. encrypt_and_sign to prepare the message to be sent. When the executive
  49. wants to receive a message from the network, it uses
  50. authenticate_and_decrypt to verify the message is valid and decrypt it.
  51. These two functions utilize the following algorithms:
  52. sha1 - hash algorithm secure for using with hmac
  53. hmac - produces a 16 byte digest from any length input
  54. sober - pseudo random number generator and stream cipher
  55. The hmac algorithm requires a 16 byte key.
  56. The sober algorithm requires a 16 byte private key.
  57. The sober algorithm requires a 16 byte public initial vector.
  58. The private key is read from disk and stored in memory for use with the
  59. sober algorithm to generate the three required keys.
  60. Every message starts with a
  61. struct security {
  62. unsigned char digest[20]; A one way hash digest
  63. unsigned char salt[16]; A securely generated random number
  64. }
  65. When a message is sent (encrypt_and_sign):
  66. ------------------------------------------
  67. 1. sober is used to create a 16 byte random number (salt) using the md4
  68. algorithm
  69. 2. sober is keyed with the private key and the initial vector is set to the
  70. salt. Then a 48 byte key is read from the sober algorithm. This 48 byte
  71. key is split into 3 16 byte keys. The keys are the hmac key, the sober key
  72. and the sober initial vector.
  73. 3. A sober instance is keyed with the sober key and sober initial vector
  74. from step #2.
  75. 4. The data of the packet, except for the security header, is encrypted using
  76. the sober cipher that was initialized in step #3.
  77. 5. The salt is stored in the security header of the outgoing message.
  78. 6. The hmac is initialized with the hmac key generated in step #2.
  79. 7. The message, except for the security header, is hmaced to produce a digest
  80. using the sha1 algorithm.
  81. 8. The digest is stored in the outgoing message.
  82. 9. The message is transmitted.
  83. When a message is received (decrypt_and_authenticate):
  84. ------------------------------------------------------
  85. 1. sober is keyed with the private key and the initial vector is set to the
  86. salt in the received message. Then a 48 byte key is read from the sober
  87. algorithm. This 48 byte key is split into 3 16 byte keys. The keys are the
  88. hmac key, the sober key and the sober initial vector.
  89. 2. The sober key and sober initial vector from step #1 are used to key a
  90. new sober instance.
  91. 3. The hmac is setup using the hmac key generated in step #1 using sha1.
  92. 5. The message is authenticated, except for the security header.
  93. 6. If the message was not authenticated, the caller is told of the result.
  94. The caller ignores the message.
  95. 7. The message is decrypted, except for the security header, using the sober
  96. algorithm in step #2.
  97. 8. The message is processed.
  98. This does consume some resources. It ensures the private key is never shared
  99. openly, that messages are authenticated, that messages are encrypted, and that
  100. any key exposure of the sober encryption key, sober initial vector, or hmac
  101. key can only be used to attack one of the algorithms. Finally every key used
  102. is randomly unique (within the 2^128 search space of the input to sober) to
  103. ensure that keys are never reused, nonce's are never reused, and hmac's are
  104. never reused.
  105. Comments welcome mailto:corosync@lists.osdl.org