Analisando o Always Encrypted Gustavo Moura Fé Maia @GuzzMFM | UBEC [email protected] PATROCINADORES Próximos eventos 09/10/2016 (amanhã!) PosConf – 150 otimizações que você deveria conhecer (por Fabiano Amorim) 14 a 18/11/2016 24 Hours of PASS em Português 26/11/2016 SQL Saturday #573 (Brasília) Apresentação pessoal Gustavo Maia – um de muitos =] M(TA|CTS?) #RegExLover Database enthusiast desde 2009 SQL Server geek desde 2012 Agenda Porque Always Encrypted? Como funciona? Implantando o Always Encrypted Analisando dados criptografados Porque Always Encrypted? Michael Stonebraker Professor do MIT; Vencedor do Turing Award (2014); Criador do INGRES e PostGRES; “The Traditional RDBMS Wisdom is (Almost Certainly) All Wrong” (2013). Tempo gasto em uma consulta 24% 24% Buffer Pool Latching Locking 4% Processamento 24% Recovery 24% Fonte: Custo da memória ao longo dos anos Porque Always Encrypted? Barateamento da memória RAM + Tecnologias In-Memory Mais dados por mais tempo em memória Segurança da informação no SQL Server TDE, backup criptografado, SSL, IPSec, etc. Ataques de Memory Sniffing e Memory Dump Agenda Porque Always Encrypted? Como funciona? Implantando o Always Encrypted Analisando dados criptografados Chaves criptográficas Column Master Key (CMK) Key-protecting key RSA_OAEP Column Encryption Key (CEK) Data encryption key AEAD_AES_256_CBC_HMAC_SHA_256 IV depende do tipo de criptografia Determinístico vs Aleatório Tamanho da coluna criptografada Version 1 Version byte (1B); MAC (32 B); Vetor de inicialização (16 B); Texto cifrado (16+ B). MAC 32 IV cipher_text 16 (FLOOR (DATALENGTH (cell_data) / 16) + 1) * 16 Key Store Local de armazenamento da CMK Azure Key Vault; Hardware Security Modules (HSM); Windows Certificate Store. Certificado de chave pública (CA ou Auto-assinado). Always Encrypted Driver Responsável pela interação com a Key Store Realiza a criptografia e descriptografia do conteúdo Promove transparência para a aplicação SELECT * FROM dbo.Pessoa SELECT * FROM dbo.Pessoa App ADO.NET Nome CPF Logradouro Gustavo 12345678910 Perto de Lá Nome CPF Logradouro José Silva 01234567891 Lugar nenhum Gustavo 0x749... 0x692... José Silva 0x193... 0x666... Data Flow dbo.Pessoa.CPF dbo.Pessoa.Logradouro Metadata Nome CPF Logradouro Gustavo 0x749... 0x692... José Silva 0x193... 0x666... EXEC sys.sp_describe_parameter_encryption ‘SELECT Nome,Logradouro FROM Pessoa WHERE CPF = @CPF’ SELECT Nome, Logradouro FROM Pessoa WHERE CPF = ‘12345678910’ SELECT Nome,Logradouro FROM Pessoa WHERE CPF = @CPF (@CPF = 0x749...) App Nome Logradouro Gustavo Perto de Lá Data Flow Metadata Flow ADO.NET dbo.Pessoa.CPF Metadata Nome Logradouro Nome CPF Logradouro Gustavo 0x692... Gustavo 0x749... 0x692... José Silva 0x193... 0x666... dbo.Pessoa.Logradouro Metadata Agenda Porque Always Encrypted? Como funciona? Implantando o Always Encrypted Analisando dados criptografados Implantando o Always Encrypted Agenda Porque Always Encrypted? Como funciona? Implantando o Always Encrypted Analisando dados criptografados Analisando dados criptografados Data pages 8K ou 8192 bytes; In-row; Row-overflow; LOB (Large Object). Fonte: DELANEY et al (2013) Analisando dados criptografados Fonte: DELANEY et al (2013) Analisando dados criptografados em memória Analisando dados criptografados Tabular Data Stream (TDS) Protocolo da camada de aplicação usado entre o SQL Server e o Cliente; Trabalha com mensagens e tokens; Versão 7.4 – atualizada com o lançamento do SQL Server 2016. Analisando dados criptografados Cliente Servidor PRELOGIN PRELOGIN RESPONSE LOGIN7 LOGINACK SQL BATCH ROW DATA Analisando dados criptografados TDS Header COLMETADATA ROW DATA Token Type Cek Table EK Value Count Database ID Cek ID Cek Version Encrypted Key Key Store Name Key Path Asymmetric Algorithm Column Data Flags Type Info Crypto Metadata Colname Analisando dados criptografados