[fun] Linus and SHA1


From the Crypto ‘88 conference, 1988
A specter is haunting the modern world, the specter of crypto anarchy.
Computer technology is on the verge of providing the ability for individuals and groups to communicate and interact with each other in a totally anonymous manner. Two persons may exchange messages, conduct business, and negotiate electronic contracts without ever knowing the True Name, or legal identity, of the other. Interactions over networks will be untraceable, via extensive re-routing of encrypted packets and tamper-proof boxes which implement cryptographic protocols with nearly perfect assurance against any tampering. Reputations will be of central importance, far more important in dealings than even the credit ratings of today. These developments will alter completely the nature of government regulation, the ability to tax and control economic interactions, the ability to keep information secret, and will even alter the nature of trust and reputation.
The technology for this revolution–and it surely will be both a social and economic revolution–has existed in theory for the past decade. The methods are based upon public-key encryption, zero-knowledge interactive proof systems, and various software protocols for interaction, authentication, and verification. The focus has until now been on academic conferences in Europe and the U.S., conferences monitored closely by the National Security Agency. But only recently have computer networks and personal computers attained sufficient speed to make the ideas practically realizable. And the next ten years will bring enough additional speed to make the ideas economically feasible and essentially unstoppable. High-speed networks, ISDN, tamper-proof boxes, smart cards, satellites, Ku-band transmitters, multi-MIPS personal computers, and encryption chips now under development will be some of the enabling technologies.
The State will of course try to slow or halt the spread of this technology, citing national security concerns, use of the technology by drug dealers and tax evaders, and fears of societal disintegration. Many of these concerns will be valid; crypto anarchy will allow national secrets to be trade freely and will allow illicit and stolen materials to be traded. An anonymous computerized market will even make possible abhorrent markets for assassinations and extortion. Various criminal and foreign elements will be active users of CryptoNet. But this will not halt the spread of crypto anarchy.
Just as the technology of printing altered and reduced the power of medieval guilds and the social power structure, so too will cryptologic methods fundamentally alter the nature of corporations and of government interference in economic transactions. Combined with emerging information markets, crypto anarchy will create a liquid market for any and all material which can be put into words and pictures. And just as a seemingly minor invention like barbed wire made possible the fencing-off of vast ranches and farms, thus altering forever the concepts of land and property rights in the frontier West, so too will the seemingly minor discovery out of an arcane branch of mathematics come to be the wire clippers which dismantle the barbed wire around intellectual property.
Arise, you have nothing to lose but your barbed wire fences!
Timothy C. May -
tcmay@netcom.com
Piece of cake… As root:
bioctl -P $DISK
where $DISK is the target disk.
Para criar um thumbdrive com crypto no OpenBSD.
Primeiro coloque o seu drive no seu pc. Use o dmesg para pegar o id do device que voce acabou de colocar, deve ser as ultimas linhas, logo:
dmesg | tail
No meu caso retornou:
sd2 at scsibus4 targ 1 lun 0: <Kingston, DataTraveler 3.0, PMAP> removable serial.09511666E3A08995038B
sd2: 59148MB, 512 bytes/sector, 121135104 sectors
OK, agora eu sei que o device que coloquei esta’ como sd2. Vamos limpar de fato o nosso device.
dd if=/dev/urandom of=/dev/rsd2c bs=1m
Isso vai escrever por todo device random bytes, limpando o que estiver la’ dentro. Isso pode/vai demorar um pouco.
Depois de zerar nosso device, vamos criar o registro MBR nele.
fdisk -iy sd2
Agora podemos criar uma particao com o formato RAID usando o disklabel.
disklabel -E sd2

Agora que criamos nossa particao a do tipo RAID. Vamos criar, um device raidsoft0 usando crypto.
bioctl -c C -l sd2a softraid0
Ele vai te perguntar o passphrase que voce deseja usar.

No final do processo ele vai te indicar o device id que foi gerado. No meu caso foi sd5. Agora podemos organizar o device e criar nossa particao e filesystem.
dd if=/dev/zero of=/dev/rsd5c bs=1m count=1
fdisk -iy sd5
disklabel -E sd5
O processo de criacao da particao e’ o mesmo que o anterior, porem agora vamos deixar o FS type padrao.

Por fim, criando o filesystem…
newfs sd5a

Seu device esta’ pronto para mount e uso.
Lembre-se de utilizar o bioctl depois de usar seu device.
bioctl -d sd5
age e’ uma ferramenta simples, moderna e segura para cryptografar seus arquivos.
Ele usa chaves privadas e publicas para encryptar arquivos. Voce pode gerar uma chave “age” mesmo, ou usar a sua chave ssh1.
No nosso querido OpenBSD…
pkg_add age
Para encryptar um arquivo…
age -e -R ~/.ssh/id_ed25519.pub -o target-file input-file

Aqui voce pode ver que o conteudo do arquivo gerado (secret.txt) esta’ cryptografado.
Para descryptar usando a sua chave privada…
age -d -i ~/.ssh/id_ed25519 input-file > output-file

/comments changelog@umgeher.org?Subject=Re: age
/permalink https://umgeher.org/posts/2022/01/age.html
Secure Shell (SSH) e’ um protocolo de rede cryptografado. Usamos SSH para ter acesso a outro computador de forma segura em um ambiente nao seguro.
“A little bit of math can accomplish what all the guns and barbed wire can’t: a little bit of math can keep a secret.”
– Edward Snowden
Tatu Ylönen, pesquisador na Teknillinen korkeakoulu, em Helsinki, Finlandia, criou o SSH em 1995. A primeira versao do protocolo leva o nome de SSH-1. O objetivo do protocolo e' subtistuir os protocolos telnet, ftp, rlogin e rsh. Fornecendo autenticacao e seguranca na comunicao entre as maquinas.
Em 1999, desenvolvedores do OpenBSD fizeram um fork da ultima versao open-source do SSH (1.2.12), e esse fork ganhou o nome de OpenSSH.
O OpenSSH se tornou a implementacao mais popular e usada no ano de 2005. Ele e’ o servidor default de varios sistemas operacionais e distribuicoes.

Existem varias implementacoes de servidores SSH. Porem a mais usada, conhecida e (na minha opiniao) melhor versao e’ do OpenBSD, chamado de OpenSSH. Deste ponto para frente, irei tratar OpenSSH apenas como SSH.
SSHD (servidor do SSH) ja’ deve estar instalado em seu sistema operacional. Caso nao, recomendo voce trocar de sistema operacional.
Normalmente o arquivo de configuracao do SSHD esta’ localizado em
/etc/ssh/sshd_config.
Algumas opcoes que eu gosto de deixar configurado:
AuthorizedKeysFile .ssh/authorized_keys
ChallengeResponseAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin no
PubkeyAuthentication yes
Local onde as chaves publicas sao colocadas para serem usadas/aceitas
como authentication para um usuario. Recomendo deixar no default
(.ssh/authorized_keys .ssh/authorized_keys2).
Diz se o usuario pode logar usando o teclado… =) Eu sempre deixo como no.
Detalhe, ChallengeResponseAuthentication e’ um alias hoje, o nome da opcao agora e’ KbdInteractiveAuthentication.
Diz se o usuario pode usar password para authentication. Nunca deixe yes aqui… sempre no.
Configura se um usuario pode ser logar sem password. Deixe como no.
Configura se o servidor vai aceitar o root fazer login. Recomendo deixar sempre em no.
Especifica se usuario pode entrar usando chaves primarias contra chaves publicas. Deixe como yes.
Novamente, seu sistema ja’ deve vir com OpenSSH Client instalado. Caso nao, recomendo mudar de sistema operacional!
Devemos usar sempre chaves para fazer authentication. Para gerar um par de chaves, use o comando:
ssh-keygen -t ed25519
Segue um screen-shot mostrando o ssh-keygen.

Eu setei o destino da chave criada para /tmp/ssh-demo so’ para
nao re-escrever a minha chave atual. Se for a primeira vez que esta'
criando a chave, apenas aceite o default.
Use uma senha forte, que voce nao vai esquecer!
E nao use RSA! Use ed25519.
Para voce configurar um user conseguir logar usando a chave
privada dele. Coloque a chave publica do user no
~/.ssh/authorized_keys.

Nesse exemplo, eu usei minha chave publica, localizada em
~/.ssh/id_ed25519.pub no arquivo ~/.ssh/authorized_keys.
Para conectar a um SSHD, simplemente use o comando:
ssh seuUserNaMaquinDestino@maquinaDestino
Exemplo:
ssh umgeher@umgeher.org
Com SSH podemos criar um tunnel de uma forma muito simples.
Vamos usar o seguinte senario.
Eu estou na minha workstation, chamada raven. Vou conectar em uma maquina remota, chamada, tyr. A maquina tyr esta’ dentro de uma rede que existe varios servicos la’ dentro, porem quero conectar na maquina lunna que tem um HTTPd servido uma intranet. Eu via SSH consigo fazer com que meu browser local, na maquina raven, consiga conectar na intranet na maquina remota lunna.
Um simples comando:
ssh -L 8080:192.168.20.245:80 umgeher@tyr
No caso, lunna tem um ip fixo dentro da rede, onde tyr tem acesso, 192.168.20.245. No meu browser eu vou acessar a intranet via localhost:8080. Essa porta esta’ ligada a porta 80 da maquina lunna via a minha connection ssh da maquina tyr.
Explicando o argumento -L, Porta Local : IP Destino : Porta Destino.
/comments changelog@umgeher.org?Subject=Re: SSH
/permalink https://umgeher.org/posts/2022/01/ssh.html
“Cryptography is the ultimate form of non-violent direct action.”
– Julian Assange
PGP (Pretty Good Privacy) e’ um conjunto de software desenvolvido pelo Philip R. Zimmermann para assinar, encriptar e descriptar arquivos.
Hoje normalmente usamos o OpenPGP e o GnuPG, duas versoes open-source do PGP. Sendo o mais comum, e tratado aqui como default, o GnuPG.
O PGP gera um par de chaves, uma privada e uma publica. Cada chave e' uma longa string de chars gerados randomicamente e de forma unica para voce. Sua chave publica e’ ligada a sua chave privada usando uma funcao matematica especial.
A chave publica pode e deve ser distribuida para quem voce quiser. A chave publica que e’ usada para criptografar os arquivos para voce. Existem servidores de chaves publicas, que chamamos de keyserver. Neles e’ possivel enviar sua chave publica, facilitando a quem quiser enviar uma msg, arquivo ou qualquer outra coisa de forma criptografado para voce.
Ja’ a sua chave privada nao deve ser distribuida e nem compartilhada para ninguem. Repito, sua chave privada nao deve ser compartilhada ou distribuida para ninguem de forma nenhuma. A sua chave privada e’ usada para descriptar os arquivos e msgs que voce vai receber.
Para efeito de ilustracao, imagine que voce e seu amigo querem trocar presentes e nao querem que ninguem saiba o que e’. Cada um de voces tem uma chave e um cadeado. Voces trocam os seus cadeados. Cada um coloca o presente em uma caixa e tranca com o cadeado. Depois de trancado, so’ quem tem a chave do cadeado pode abrir a caixa e pegar o presente.
O cadeado no caso e’ a sua chave publica. E a chave para abrir o cadeado e’ a chave privada.
OpenBSD, meu OS do dia dia, ja’ vem com o GnuPG, se voce usa alguma distro Linux, bem provavel que ja’ venha com ele instalado, caso nao, procure a documentacao da sua distro.
Execute…
gpg --full-generate-key
Use a opcao 1 RSA and RSA. Coloque o maior keysize possivel, sempre. O recomendado e’ colocar uma data de expiracao da chave, no meu exemplo eu nao coloquei. Mas e’ recomendado 2 anos. Coloque suas informacoes, caso queira e digite uma senha forte e segura para essa chave.

Agora voce pode fazer o upload da sua public key para um KeyServer.
Primeiro, copie o seu keyID. Para saber seu keyID, digite gpg -k [seu@email].

No meu caso e’ A2CF45BE990C0E05F3FB31809647DB206B51315F.
Agora voce pode fazer o upload da sua public key.
gpg --send-key [keyID]
Uma opcao1 e’ exportar sua public key para voce copiar e colcar ou em um arquivo. Para isso digite…
gpg --export -a [seu@email]
Isso vai exportar sua chave para o console.

Caso queira para um arquivo apenas direcione para um arquivo.
gpg --export -a [seu@email] > publickey.asc

Para ver seu fingerprint da sua chave, execute:
gpg --fingerprint [seu@email]
Para cryptografar um arquivo digite…
gpg -e -r [keyID/email] [arquivo]

Nesse exemplo, eu compactei o conteudo do diretorio keeper2
usando o comando tar -zcvf k.tar.gz keeper. Depois eu
cryptografei ele (para mim mesmo3) usando o comando gpg -e -r me@umgeher.org.
Quando voce receber um arquivo cryptografado deve executar…
gpg -d [arquivo]

Nesse exemplo eu descryptografo o aqruivo que acabei de cryptografar e descompacto para mostrar que os mesmos artefatos estao la'.
Voce pode importar qualquer chave publica utilizando o comando…
gpg --import [arquivo-chave-publica]
Exemplo, para importar minha chave publica voce pode executar…
curl -sL https://umgeher.org/umgeher-public-key.asc | gpg --import
Agora voce pode cryptografar qualquer arquivo usando minha chave publica…
gpg -e -r me@umgeher.org [arquivo]
O uso de keyservers e’ otimo, porem eu recomendo voce deixar sua chave publica em um local que todos confiem que e’ realmente voce. No meu caso, eu deixo no meu site, meu main mastodon, no sr.ht e no keyoxide. ↩︎
Nemeth’s Quake map… Mandei um email perguntando se ele deixou esse map public, caso sim, vou deixar o link aqui depois. ↩︎
Antigamente eu deixava meu backup de coisas sensiveis cryptografado com pgp. Hoje eu uso outra ferramenta. Vou escrever sobre ela quando sugir a oportunidade. ↩︎
/comments changelog@umgeher.org?Subject=Re: PGP
/permalink https://umgeher.org/posts/2022/01/pgp.html
/comments changelog@umgeher.org?Subject=Re: [fun] Linus and SHA1
/permalink https://umgeher.org/posts/2023/03/fun-linus-and-sha1.html