Quero uma senha segura com base91.

6 min

language: ja bn en es hi pt ru zh-cn zh-tw

Olá, sou um inútil.
Recentemente, a pergunta 'Você quer que o Chromium/Chrome crie senhas automaticamente?' me deixa muito ansioso, então quero criar senhas que sejam relativamente simples e reversíveis até certo ponto.
A propósito, no caso do Artix Linux, o comando base91 não estava incluído por padrão, então estou assumindo que você já executou yay -S base91.

Conclusão

No final, decidi gerar senhas com isso.

echo -n "string" | sha384sum | awk '{print $1}' | xxd -r -p | base91 | tr -d "\n" && echo

※Pensei nisso depois, mas provavelmente awk '{printf $1}' é melhor.

Divagações

Para ser honesto, eu estava usando strings geradas com sha*sum, e embora eu estivesse satisfeito com o número de caracteres e o valor do hash em si fosse irreversível, eu não me importaria se fosse descoberto.
No entanto, a própria hashificação é apenas uma string hexadecimal, então se um ataque de força bruta sério ocorrer, as strings tratadas seriam [a-z0-9] em termos de expressão regular.

Além disso, hoje em dia, somos instruídos a usar letras maiúsculas e símbolos, o que é terrível da minha parte.
Então, desta vez, quero aumentar o número de padrões de caracteres.

Como isso funciona

Primeiro, vamos desconstruir:

echo -n "string"

Imprime a string para a saída padrão sem uma nova linha, e passa para o próximo comando via pipe.

sha384sum

Faz o hash da string recebida com SHA384.

awk '{print $1}'

A string recebida tem um - extra no final que não é necessário, então é formatada com awk.

xxd -r -p

Eu mesmo descobri isso pesquisando pela primeira vez: ele imprime uma string hexadecimal em formato binário.
Portanto,
ele imprime a string recebida em formato binário.

base91

Codifica o binário recebido com base91 e o imprime.

 tr -d "\n" && echo

Como base91 formata automaticamente com quebras de linha, removemos os caracteres de nova linha e, se for bem-sucedido, imprimimos uma linha vazia no final, pois é difícil copiar e colar sem uma quebra de linha.
E fica assim:

alleycat:[haturatu]:~/git/ckr/ckr$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
"OS[fY@wwBqip+$db@5+g!yvk$jE3,M3F({qu]1(_dS2Or()Q:ZqyhOb&9Y

Na verdade, acabei de pensar nisso, então não sei se muitos formulários realmente aceitarão isso.
A propósito, o número de caracteres é:

$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" | wc -c
59

Mesmo para uma string curta, 59 caracteres são gerados.

Vantagens

Em primeiro lugar, quando gerado com xxd -r -p, ele pode ser armazenado como dados binários.
Portanto, mesmo que você esqueça a string original, você pode restaurá-la se tiver o binário.

Em termos de etapas:
sha384sum = irreversível
xxd -r -p = reversível
base91 = reversível
É um processo como este.
Ou melhor, a string resultante é mais longa que a frase-senha original, e pensei: 'Não seria melhor tornar a frase-senha original irreversível em um estágio inicial?' E foi assim que cheguei a isso.

Além disso, quando gerado desta forma, parece que não é possível ler o binário com comandos como saslauthdb ou o comando strings usado para depuração de binários.
É seguro o suficiente para ser melhor do que ter dados de texto simples.

A probabilidade de colisão ao fazer hash com shasum é bastante rigorosa.
E como isso é ainda mais codificado em formato Base91 a partir de dados binários, parece ser melhor do que as senhas que eu criaria com meu cérebro limitado.

Adicionar uma função ao .bashrc

Para ser sincero, digitar isso toda vez é um inferno.

funcao_nome() {
  echo -n "$1" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
}

E configurei para que você possa gerar senhas com funcao_nome string.
Se isso ainda for quebrado, sinto que seria como dizer 'desista de ser humano' (referência a Yura Yura Teikoku), ou melhor, 'desista da criptografia'...

E se você quiser aumentar o comprimento da string da própria senha a ser usada no lado do servidor, pode usar sha512; se quiser diminuir o número de caracteres reconhecíveis no bash, pode usar base64.
É fácil de mudar, e você pode simplesmente modificar a função correspondente e adicioná-la ao .bashrc, certo?

Related Posts