2017-09-25 4 views

Répondre

2

Réponse courte: Non, ce n'est pas un système enfichable dynamiquement.

Le cryptage AES est cuit dans realm-core, la bibliothèque partagée C++, au moment de la compilation et utilise les différentes fonctionnalités de la plate-forme disponible crypto (basé sur le matériel OS /). Il est open source, donc en théorie, vous pouvez écrire un fournisseur différent et gérer les changements de méthodes comme realm::util::encryption_read_barrier et realm::util::encryption_write_barrier comme nécessaire ... ou éventuellement faire un contrat payé avec Realm en fonction de vos exigences de chiffrement personnalisé.

Re: https://github.com/realm/realm-core/blob/master/src/realm/util/aes_cryptor.hpp

class AESCryptor { 
public: 
    AESCryptor(const uint8_t* key); 
    ~AESCryptor() noexcept; 

    void set_file_size(off_t new_size); 

    bool read(FileDesc fd, off_t pos, char* dst, size_t size); 
    void write(FileDesc fd, off_t pos, const char* src, size_t size) noexcept; 

private: 
    enum EncryptionMode { 
#if REALM_PLATFORM_APPLE 
     mode_Encrypt = kCCEncrypt, 
     mode_Decrypt = kCCDecrypt 
#elif defined(_WIN32) 
     mode_Encrypt = 0, 
     mode_Decrypt = 1 
#else 
     mode_Encrypt = AES_ENCRYPT, 
     mode_Decrypt = AES_DECRYPT 
#endif 
    }; 

#if REALM_PLATFORM_APPLE 
    CCCryptorRef m_encr; 
    CCCryptorRef m_decr; 
#elif defined(_WIN32) 
    BCRYPT_KEY_HANDLE m_aes_key_handle; 
#else 
    AES_KEY m_ectx; 
    AES_KEY m_dctx; 
#endif 

    uint8_t m_hmacKey[32]; 
    std::vector<iv_table> m_iv_buffer; 
    std::unique_ptr<char[]> m_rw_buffer; 
    std::unique_ptr<char[]> m_dst_buffer; 

    void calc_hmac(const void* src, size_t len, uint8_t* dst, const uint8_t* key) const; 
    bool check_hmac(const void* data, size_t len, const uint8_t* hmac) const; 
    void crypt(EncryptionMode mode, off_t pos, char* dst, const char* src, const char* stored_iv) noexcept; 
    iv_table& get_iv_table(FileDesc fd, off_t data_pos) noexcept; 
};