Gere HMAC no Bash sem revelar o segredo

1

Gostaria de calcular um resumo HMAC-SHA512 no meu script bash. Até agora eu encontrei isso repetido muitas vezes em muitos sites diferentes.

echo -n message | openssl dgst -sha256 -hmac secret -binary >message.mac

Aparentemente, ninguém postando isso percebe que esta não é a maneira correta de passar uma string secreta para um programa, pois o segredo será visível na lista de processos para todos os outros processos em execução no sistema. Existe alguma outra maneira (talvez com outra ferramenta) para facilmente fazer um HMAC no shell com melhor interface para passar segredos?

UPDATE

Eu uso a seguinte ferramenta ( ~/bin/hmac ) agora. Ele pega a chave da variável de ambiente MACKEY .

#!/usr/bin/env python3
import hmac, sys, os

key    = os.environ['MACKEY'].encode('utf-8')
algo   = os.getenv('MACALGO', 'sha512')
digest = hmac.new(key, digestmod = algo)

while True:
    buf = sys.stdin.buffer.read(512)
    if not buf:
        break
    digest.update(buf)

print(digest.hexdigest())

Uso:

echo -n message | MACKEY=foobar hmac
    
por Mark Howard 26.01.2018 / 13:44

1 resposta

1

As reorientações não fazem parte da lista de argumentos.

Isso é considerado seguro contra a espionagem ps:

cmd </file/key
cmd <<<"key"

Canos sem nome também são possíveis dentro de um script

echo "secret" | cmd

Exemplo de passagem segura de senha

Portanto, esse script é considerado seguro:

#!/bin/bash

read secretkey </dev/stdin

var="<?= hash_hmac(\"sha512\", \"$1\", \"$secretkey\"); ?>"

php7.1 <<<"$var"

O </dev/stdin pode ser substituído por um </dir/keyfile se a chave puder ser armazenada em um arquivo.

Para a versão stdin , use-a da seguinte forma:

./script "Message" <<<"secretkey"
    
por 27.01.2018 / 22:35