libreoffice lockdown encryption improvements to document
play

LIBREOFFICE LOCKDOWN & ENCRYPTION Improvements to document - PowerPoint PPT Presentation

LIBREOFFICE LOCKDOWN & ENCRYPTION Improvements to document security & permissions Thorsten Behrens, CIB software GmbH FOSDEM 2020, Brussels, February 3, 2020 1 Yours Truly Thorsten Behrens thb@libreoffice.org Since 2015 with


  1. LIBREOFFICE LOCKDOWN & ENCRYPTION Improvements to document security & permissions Thorsten Behrens, CIB software GmbH FOSDEM 2020, Brussels, February 3, 2020 1

  2. Yours Truly Thorsten Behrens – thb@libreoffice.org ● Since 2015 with CIB & built the LibreOffice team there ● One of those LibreOffice forkers/founders, also on The Document Foundation board ● Working with this code since about 2001 (OpenOffice, then LibreOffice) ● Hacker, computer scientist, FLOSS & Open Standards lover 2

  3. CREDITS Vasily Melenchuk Serge Krot Samuel Mehrbrodt 3

  4. ANOTHER „ENTERPRISE“ FEATURE WE MISSED 1. FOR DESKTOP USERS 2. PERMIT ENTERPRISES TO CENTRALLY CONTROL WHAT USERS CAN DO 3. WITH THEIR COMPUTERS & THEIR DOCUMENTS 4

  5. ARCHITECTURE FOR MS RIGHTS MANAGEMENT (RMS) Client or user certificate Code signature UNO API LibreOffice Extension / RMS API RMS Client 2.1 RMS Server Wrapper LibreOffice Offjce user 5

  6. SEQUENCE DIAGRAM FOR A RMS DECRYPTION LibreOffice RMS Client RMS agent GnuPG process GnuPG process Server RMS code Extension gpg gpg Authenticate against client, Ensure integrity of client-side request session key (OS and RMS client application) Request session key Session key with permission meta data Decrypt document Active Directory 6

  7. Wrapper Extension LibreOffice 7

  8. ARCHITECTURE FOR GNUPG (SUGGESTION) User private key Code signature UNO API LibreOffice Extension GnuPG plus WKS / permitted keychain LibreOffice Offjce user 8

  9. IMPLEMENTATION 9

  10. CORE API CHANGE FOR THIS FEATURE interface XPackageEncryption: css::uno::Xinterface { boolean readEncryptionInfo( [in] sequence < css::beans::NamedValue > rOleStreams); boolean generateEncryptionKey( [in] string rPassword); boolean decrypt( [in] css::io::XInputStream rxInputStream, [out] css::io::XOutputStream rxOutputStream); sequence<css::beans::NamedValue> createEncryptionData( [in] string rPassword); boolean setupEncryption( [in] sequence<css::beans::NamedValue> rMediaEncData); sequence<css::beans::NamedValue> encrypt( [in] css::io::XInputStream rxInputStream); boolean checkDataIntegrity(); }; 10

  11. SOME SCREENSHOTS 11

  12. SOME SCREENSHOTS 12

  13. Any questions? :) 16

  14. THANK YOU! 17

Recommend


More recommend