Explicação do sinalizador -hmac em SSL aberto

Explicação do sinalizador -hmac em SSL aberto

Me deparei com o seguinte comando para unix no binance que estava tentando descompactar. Veja aqui:https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md

(Seção: Exemplos de endpoint ASSINADO para POST /api/v1/order)

openssl dgst -sha256 -hmac

O que entendi é que é uma chamada ao comando openssl para produzir um resumo, o resumo será do tipo sha256 conforme acordado pelas especificações padrão. O que não entendo é a -hmacbandeira. O que é e o que faz no nível matemático?

Minha tentativa de resolver o problema:

Fiz uma pesquisa no Google openssl -hmace openssl dgst -hmacmas os 10 principais resultados não foram úteis para mim. Então imagino que seria melhor que usuários mais experientes perguntassem.

Atualizações:

A bandeira não é mencionada nestes documentos:https://www.mkssoftware.com/docs/man1/openssl_dgst.1.aspe então estou começando a acreditar que pode não ter propósito criptográfico. Embora eu não tenha certeza agora.

Encontrei algo semelhante ao sinalizador mencionado nesta pergunta:https://stackoverflow.com/questions/7285059/hmac-sha1-in-bash

Responder1

HMAC também é chamado de hash com chave. Portanto, você só poderá gerar o mesmo hash durante a verificação se tiver a mesma chave usada durante a geração da assinatura. O resultado do MAC é chamado deetiqueta de autenticação.

HMAC é uma construção especial que usa duas chamadas para o hash - no seu caso SHA-256 - que é usado internamente e não usa nenhum outroprimitivas criptográficas. Poderia, portanto, ser visto como um processo específicomododo próprio hash. Daí a inclusão emdgst.

Faltam no seu código os dados principais, que são obviamente necessários para criar um hash com chave. Isto deve ser apresentado depois -hmac. Infelizmente opensslrequer um formato binário da chave. Para mais informações vejaesta conversa antiga na lista de discussão OpenSSL.

EDIT # 1: Indo um pouco mais fundo, se você quiser especificar a chave como hexadecimais, você pode usar uma linha como esta:

echo -n "Hello world!" | openssl dgst -sha256 -mac hmac -macopt hexkey:01020304

A saída da função é a saída da segunda execução do hash, portanto, é indistinguível apenas do SHA-256 se você apenas observar o tamanho do resultado do hash/HMAC. É claro que o conteúdo será completamente diferente de apenas fazer hash dos dados (ou chave e dados concatenados).


EDIT # 2: No entanto, você não especificou uma chave, então, na verdade, o HMAC é ignorado e o SHA-256 é usado. Isso foi sinalizado como um bug, vejaaqui

Responder2

meus 2 centavos se você estiver no iOS (ou Mac OS...) cansado de brincar, eu escrevi.

https://apps.apple.com/it/app/hmac-sha256generator/id6448465719?l=en

informação relacionada