Skip to content
Snippets Groups Projects
  1. Jan 09, 2015
  2. Jan 06, 2015
  3. Dec 29, 2014
    • akwizgran's avatar
      Don't try to erase secrets from memory. · 358166bc
      akwizgran authored
      1. The things we're really trying to protect - contact identities,
      message contents, etc - can't be erased from memory because they're
      encapsulated inside objects we don't control.
      
      2. Long-term secrets can't be protected by erasing them from memory
      because they're stored in the database and the database key has to be
      held in memory whenever the app's running.
      
      3. If the runtime uses a compacting garbage collector then we have no
      way to ensure an object is erased from memory.
      
      4. Trying to erase secrets from memory makes the code more complex.
      
      Conclusion: Let's not try to protect secrets from an attacker who can
      read arbitrary memory locations.
      358166bc
  4. Nov 04, 2014
  5. Oct 08, 2014
  6. Jan 08, 2014
  7. Dec 19, 2013
    • akwizgran's avatar
      Replaced private messages with private groups. · 0dc86922
      akwizgran authored
      Private messages are now the same as group messages, but groups can be
      private or public. When a contact is added, a private group is created
      and designated as the inbox for exchanging private messages with the
      contact.
      0dc86922
  8. Jun 17, 2013
  9. Jun 14, 2013
  10. Apr 30, 2013
    • akwizgran's avatar
      Removed bundle encryption. · d5720c08
      akwizgran authored
      Android doesn't currently store bundles persistently, so it's premature
      to protect against accidental information leaks through persistent
      bundle storage. Protecting against deliberate information leaks by the
      OS is probably futile, so there's currently no need for bundle
      encryption.
      d5720c08
  11. Apr 16, 2013
  12. Mar 29, 2013
  13. Feb 19, 2013
  14. Feb 18, 2013
  15. Dec 05, 2012
  16. Nov 13, 2012
  17. Nov 12, 2012
  18. Oct 30, 2012
  19. Oct 24, 2012
  20. Sep 23, 2012
  21. Aug 28, 2012
  22. May 24, 2012
    • akwizgran's avatar
      Use AES/GCM instead of AES/CTR and HMAC. · d6b260ed
      akwizgran authored
      This makes us Suite B compliant and saves 32 bytes per frame. The
      AES/GCM implementation refuses to decrypt the frame header before
      checking the MAC, so we have to use AES/CTR to peek at the header. The
      header is still covered by the MAC, and we still check it after peeking!
      d6b260ed
  23. Apr 28, 2012
  24. Mar 29, 2012
  25. Feb 24, 2012
  26. Feb 23, 2012
  27. Feb 06, 2012
  28. Jan 17, 2012
  29. Dec 02, 2011
  30. Nov 16, 2011
    • akwizgran's avatar
      Forward secrecy. · f6ae4734
      akwizgran authored
      Each connection's keys are derived from a secret that is erased after
      deriving the keys and the secret for the next connection.
      f6ae4734
  31. Nov 15, 2011
  32. Sep 13, 2011
  33. Aug 19, 2011
  34. Aug 18, 2011
    • akwizgran's avatar
      Frame the encrypted data independently of inter-packet boundaries and · 2411e200
      akwizgran authored
      authenticate each frame before parsing its contents. Each connection
      starts with a tag, followed by any number of frames, each starting
      with the frame number (32 bits) and payload length (16 bits), and
      ending with a MAC (256 bits).
      
      Tags have the following format: 32 bits reserved, 16 bits for the
      transport ID, 32 bits for the connection number, 32 bits (set to zero
      in the tag) for the frame number, and 16 bits (set to zero in the tag)
      for the block number. The tag is encrypted with the tag key in
      ECB mode.
      
      Frame numbers for each connection must start from zero and must be
      contiguous and strictly increasing. Each frame is encrypted with the
      frame key in CTR mode, using the plaintext tag with the appropriate
      frame number to initialise the counter.
      
      The maximum frame size is 64 KiB, including header and footer. The
      maximum amount of data that can be sent over a connection is 2^32
      frames - roughly 2^48 bytes, or 8 terabytes, with the maximum frame
      size of 64 KiB. If that isn't sufficient we can add another 16 bits to
      the frame counter.
      2411e200
  35. Aug 14, 2011
Loading