AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 247165
Accepted
Ronaldo
Ronaldo
Asked: 2019-09-07 04:27:59 +0800 CST2019-09-07 04:27:59 +0800 CST 2019-09-07 04:27:59 +0800 CST

Como posso saber qual algoritmo de hash o SQL Server usou para descriptografar os dados criptografados ao usar a função DECRYPTBYPASSPHRASE?

  • 772

Minha pergunta está relacionada ao seguinte experimento com duas instâncias:

Instância do SQL Server 2017 Express (Microsoft SQL Server 2017 (RTM-CU16)) Instância do
SQL Server 2014 Express (Microsoft SQL Server 2014 (SP2-CU18))

Usei a função ENCRYPTBYPASSPHRASE para criptografar um texto e usei o resultado como @ciphertext para DECRYPTBYPASSPHRASE . O resultado dos meus testes foram estes:

Tabela de resultados

De acordo com esta correção da Microsoft ,

[...] SQL Server 2017 usa o algoritmo de hash SHA2 para fazer o hash da senha. SQL Server 2016 e versões anteriores do SQL Server usam o algoritmo SHA1 que não é mais considerado seguro.

Mas como ele sabe qual foi o algoritmo usado para criptografar os dados se não houver nenhum argumento relacionado a isso na função DECRYPTBYPASSPHRASE? Faz parte dos dados criptografados?

Pelos resultados dos meus testes, acho que o SQL Server sempre usa a versão mais recente do algoritmo disponível na instância para criptografar dados, mas tenta todos os algoritmos para descriptografar os dados até encontrar um que se ajuste ou retorne NULL quando nenhum algoritmo correspondente for encontrado . É apenas um palpite, já que não consegui encontrar nenhuma maneira de verificar qual algoritmo de hash o SQL Server usou para descriptografar os dados criptografados.

sql-server encryption
  • 1 1 respostas
  • 2340 Views

1 respostas

  • Voted
  1. Best Answer
    Sean Gallardy
    2019-09-07T06:01:55+08:002019-09-07T06:01:55+08:00

    Mas como ele sabe qual foi o algoritmo usado para criptografar os dados se não houver nenhum argumento relacionado a isso na função DECRYPTBYPASSPHRASE? Faz parte dos dados criptografados?

    Sim, bem no ponto.

    Vou usar o seguinte para a saída:

    DECLARE @Data VARBINARY(MAX)
    DECLARE @Text NVARCHAR(MAX) = N'I''ll get you, and your little dog too!'
    DECLARE @Phrase NVARCHAR(100) = N'Fly My Pretties!'
    
    SELECT @Data = ENCRYPTBYPASSPHRASE(@Phrase, @Text)
    
    SELECT @Data AS [Encrypted_Data]
    
    SELECT CAST(DECRYPTBYPASSPHRASE(@Phrase, @Data) AS NVARCHAR(MAX))
    

    Se eu executar isso na minha instância de 2014, obterei o seguinte para Encrypted_Data: 0x01000000E565142762F62...

    Se eu executar isso na minha instância de 2017, obterei o seguinte para Encrypted_Data: 0x020000004D261C666204F...

    O que deve aparecer é o preâmbulo, onde você pode ver que a instância de 2014 começa com 0x01e a instância de 2017 começa com 0x02. Este é o controle de versão do tipo de criptografia usado. Observe que há mais do que apenas isso, mas não há necessidade de entrar em detalhes para os fins desta resposta, nem precisa ser de conhecimento público.

    O SQL Server 2017 entende 0x01e 0x02porque é novo e conhece as novidades. O SQL Server 2014 entende apenas 0x01porque é mais antigo e não conhece nenhuma das novidades, pois as coisas novas não foram retroportadas.

    [...] SQL Server 2017 usa o algoritmo de hash SHA2 para fazer o hash da senha. SQL Server 2016 e versões anteriores do SQL Server usam o algoritmo SHA1 que não é mais considerado seguro.

    Isso não é a mesma coisa, mas geralmente tem a ver com a criação de chaves simétricas com o mesmo vetor de inicialização em ambas as versões. Eu escrevi sobre isso quando 2017 foi lançado e foi corrigido um pouco mais tarde com o sinalizador de rastreamento que deve ser usado, enquanto na sua pergunta não há sinalizador de rastreamento necessário para 2017 ler os dados de 2014, conforme mostrado.

    • 16

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve