
Apesar do fato de que em Habré já
não havia
um artigo sobre o IPFS .
Esclareço imediatamente que não sou especialista neste campo, mas demonstrei interesse nessa tecnologia mais de uma vez, mas tentar brincar com ela geralmente causava alguma dor. Hoje fiz novamente os experimentos e obtive alguns resultados que gostaria de compartilhar. Em resumo, o processo de instalação do IPFS e alguns chips será descrito (tudo foi feito no ubuntu, em outras plataformas que eu não tentei).
Se você perdeu o que é IPFS, ele está escrito com alguns detalhes aqui: habr.com/en/post/314768Instalação
Para a pureza do experimento, proponho a instalação imediata em algum servidor externo, pois consideraremos algumas armadilhas ao trabalhar no modo local e remoto. Então, se desejado, não será demolido por muito tempo, não há muitos.Pronto
Documentação oficialVeja a versão atual em
golang.org/dlNota: é melhor instalar o IPFS em nome do usuário, que deve usar os mais frequentes. O fato é que abaixo consideraremos a opção de montagem via FUSE e existem sutilezas por lá.cd ~ curl -O https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz tar xvf go1.12.9.linux-amd64.tar.gz sudo chown -R root:root ./go sudo mv go /usr/local rm go1.12.9.linux-amd64.tar.gz
Então você precisa atualizar o ambiente (mais detalhes aqui:
golang.org/doc/code.html#GOPATH ).
echo 'export GOPATH=$HOME/work' >> ~/.bashrc echo 'export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin' >> ~/.bashrc source ~/.bashrc
Verifique se o go está instalado
go version
Instalar IPFS
Eu gostei da maneira de instalar via
ipfs-update mais .
Instale-o com o comando
go get -v -u github.com/ipfs/ipfs-update
Depois disso, você pode executar os seguintes comandos:
versões do ipfs-update - para ver todas as versões disponíveis para download.
ipfs-update version - para ver a versão atual instalada (até que tenhamos o IPFS instalado, não haverá nenhum).
ipfs-update install latest - instale a versão mais recente do IPFS. Em vez da mais recente, respectivamente, você pode especificar qualquer versão desejada da lista de disponíveis.
Instale o ipfs
ipfs-update install latest
Verifique
ipfs --version
Diretamente com a instalação em termos gerais, tudo.
Lançamento do IPFS
Inicialização
Primeiro você precisa executar a inicialização.
ipfs init
Em resposta, você obterá algo como isto:
ipfs init initializing IPFS node at /home/USERNAME/.ipfs generating 2048-bit RSA keypair...done peer identity: QmeCWX1DD7HnXXXXXXXXXXXXXXXXXXXXXXXXxxx to get started, enter: ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
Você pode executar o comando proposto
ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
Resultado Hello and Welcome to IPFS! ██╗██████╗ ███████╗███████╗ ██║██╔══██╗██╔════╝██╔════╝ ██║██████╔╝█████╗ ███████╗ ██║██╔═══╝ ██╔══╝ ╚════██║ ██║██║ ██║ ███████║ ╚═╝╚═╝ ╚═╝ ╚══════╝ If you're seeing this, you have successfully installed IPFS and are now interfacing with the ipfs merkledag! ------------------------------------------------------- | Warning: | | This is alpha software. Use at your own discretion! | | Much is missing or lacking polish. There are bugs. | | Not yet secure. Read the security notes for more. | ------------------------------------------------------- Check out some of the other files in this directory: ./about ./help ./quick-start <-- usage examples ./readme <-- this file ./security-notes
Aqui, na minha opinião, o interessante já está começando. Na fase de instalação, os caras já estão começando a usar suas próprias tecnologias. O hash proposto QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv - não gerado especificamente para você, mas costurado no release. Ou seja, antes do lançamento, eles prepararam um texto de boas-vindas, o colocaram no IPFS e adicionaram o endereço ao instalador. Na minha opinião, isso é muito legal. E esse arquivo (mais precisamente, a pasta inteira) agora pode ser exibido não apenas localmente, mas também no gateway oficial
ipfs.io/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv . Ao mesmo tempo, você pode ter certeza de que o conteúdo da pasta não mudou de forma alguma, porque, se tivesse sido alterado, o hash também teria sido alterado.
A propósito, nesse caso, o IPFS tem algumas semelhanças com o servidor de controle de versão. Se você fizer alterações nos arquivos de origem da pasta e despejar a pasta novamente no IPFS, ele receberá um novo endereço. Ao mesmo tempo, a pasta antiga não irá a lugar nenhum e estará disponível no endereço anterior.Lançamento direto
ipfs daemon
Eles devem receber uma resposta como esta:
ipfs daemon Initializing daemon... go-ipfs version: 0.4.22- Repo version: 7 System version: amd64/linux Golang version: go1.12.7 Swarm listening on /ip4/xxxx/tcp/4001 Swarm listening on /ip4/127.0.0.1/tcp/4001 Swarm listening on /ip6/::1/tcp/4001 Swarm listening on /p2p-circuit Swarm announcing /ip4/127.0.0.1/tcp/4001 Swarm announcing /ip6/::1/tcp/4001 API server listening on /ip4/127.0.0.1/tcp/5001 WebUI: http://127.0.0.1:5001/webui Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080 Daemon is ready
Abrimos a porta para a Internet
Preste atenção a estas duas linhas:
WebUI: http://127.0.0.1:5001/webui Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Agora, se você instalou o IPFS localmente, acessará as interfaces IPFS nos endereços locais e tudo estará disponível para você (por exemplo,
localhost : 5001 / webui /). Porém, quando instalados em um servidor externo, por padrão, os gateways são fechados para a Internet. Existem dois gateways:
- Admin webui ( github ) na porta 5001.
- API externa na porta 8080 (somente leitura).
Até o momento, é possível abrir as duas portas para experimentos (5001 e 8080), mas é claro que, no servidor de batalha, a porta 5001 deve ser fechada com um firewall. Existem 4001 portas, é necessário para que outros pares possam encontrá-lo. Deve ser deixado aberto para solicitações externas.
Abra ~ / .ipfs / config para editar e encontre as seguintes linhas:
"Addresses": { "Swarm": [ "/ip4/0.0.0.0/tcp/4001", "/ip6/::/tcp/4001" ], "Announce": [], "NoAnnounce": [], "API": "/ip4/127.0.0.1/tcp/5001", "Gateway": "/ip4/127.0.0.1/tcp/8080" }
Altere 127.0.0.1 para o ip do seu servidor, salve o arquivo e reinicie o ipfs (interrompa o comando Ctrl + C e execute novamente).
Deve obter
... WebUI: http://ip__:5001/webui Gateway (readonly) server listening on /ip4/ip__/tcp/8080
Agora interfaces externas devem estar disponíveis.
Confira
http://__ip_:8080/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
O arquivo leia-me acima deve abrir.
http://__ip_:5001/webui/
A interface da web deve abrir.
Se o webui funcionar para você, as configurações do IPFS poderão ser alteradas diretamente, incluindo estatísticas de exibição, mas abaixo considerarei as opções de configuração diretamente através do arquivo de configuração, o que geralmente não é crítico. É melhor lembrar exatamente onde está a configuração e o que fazer com ela. Se o focinho da web não funcionar, será mais difícil.Configure uma interface da web para trabalhar com seu servidor
Aqui está a primeira armadilha, que foi gasta cerca de três horas.
Se você instalou o IPFS em um servidor externo, mas não instalou ou iniciou o IPFS localmente, ao acessar / webui na interface da web, você verá um erro de conexão:

O fato é que o webui, na minha opinião, funciona de maneira muito ambígua. Primeiro, ele tenta se conectar à API do servidor em que a interface está aberta (é claro, com base no endereço no navegador). e se não funcionar lá, ele tentará se conectar ao gateway local. E se você tiver o IPFS em execução localmente, seu webui funcionará bem, apenas você trabalhará com o IPFS local, não externo, embora tenha aberto o webui em um servidor externo. Em seguida, faça o upload dos arquivos, mas, por algum motivo, você não os verá assim em um servidor externo ...
E se não estiver sendo executado localmente, obteremos um erro de conexão. No nosso caso, o erro provavelmente ocorre devido ao CORS, que também é indicado pelo webui, propondo adicionar uma configuração.
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://ip_ :5001", "http://127.0.0.1:5001", "https://webui.ipfs.io"]' ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'
Acabei de registrar um curinga
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
Cabeçalhos adicionados podem ser encontrados no mesmo ~ / .ipfs / config. No meu caso é
"API": { "HTTPHeaders": { "Access-Control-Allow-Origin": [ "*" ] } },
Reiniciamos o ipfs e vemos que o webui foi conectado com êxito (pelo menos deveria se você abriu os gateways para solicitações externas, conforme descrito acima).
Agora você pode fazer upload diretamente de pastas e arquivos através da interface da Web, bem como criar suas próprias pastas.
Monte o sistema de arquivos FUSE
Este é um truque bastante interessante.
Podemos adicionar arquivos (e também pastas) não apenas através da interface da web, mas também diretamente no terminal, por exemplo
ipfs add test -r added QmfYuz2gegRZNkDUDVLNa5DXzKmxxxxxxxxxx test/test.txt added QmbnzgRVAP4fL814h5mQttyqk1aURxxxxxxxxxxxx test
O último hash é o hash da pasta raiz.
Usando esse hash, podemos abrir a pasta em qualquer nó ipfs (que pode encontrar nosso nó e obter o conteúdo), podemos na interface da web na porta 5001 ou 8080 ou localmente através de ipfs.
ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt
Mas você ainda pode abri-lo como uma pasta normal.
Vamos criar duas pastas na raiz e conceder direitos a nosso usuário.
sudo mkdir /ipfs /ipns sudo chown USERNAME /ipfs /ipns
e reinicie o ipfs com o sinalizador --mount
ipfs daemon --mount
Você pode criar pastas em outros lugares e especificar o caminho para elas através do daemon ipfs --mount --mount-ipfs / ipfs_path --mount-ipns / ipns_pathAgora a leitura desta pasta é um tanto incomum.
ls -la /ipfs ls: reading directory '/ipfs': Operation not permitted total 0
Ou seja, não há acesso direto à raiz desta pasta. Mas então você pode obter o conteúdo, conhecendo o hash.
ls -la /ipfs/QmbnzgRVAP4fL814h5mQttyqxxxxxxxxxxxxxxxxx total 0 -r--r--r-- 1 root root 10 Aug 31 07:03 test.txt
cat /ipfs/QmbnzgRVAP4fL814h5mQttyqxxxxxxxxxxxxxxxxx/test.txt test test
Além disso, até o preenchimento automático dentro da pasta funciona ao especificar um caminho.
Como eu disse acima, existem sutilezas com essa montagem: por padrão, as pastas do FUSE montadas são acessíveis apenas ao usuário atual (mesmo o root não pode ler essa pasta, sem mencionar outros usuários no sistema). Se você deseja tornar essas pastas acessíveis a outros usuários, na configuração, você precisa alterar “FuseAllowOther”: false para “FuseAllowOther”: true. Mas isso não é tudo. Se você executar o IPFS como root, tudo estará bem. E se, em nome de um usuário comum (embora sudo), você receba um erro
mount helper error: fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
Nesse caso, você precisa corrigir o /etc/fuse.conf descomentando a linha #user_allow_other.
Depois disso, reiniciaremos o ipfs.
Problemas conhecidos do FUSE
Mais de uma vez, o problema foi percebido que após reiniciar o ipfs com a montagem (ou talvez em outros casos), os pontos de montagem / ipfs e / ipns ficam indisponíveis. Não há acesso a eles, mas ls -la / ipfs mostra ???? na lista de direitos.
Encontrou uma solução:
fusermount -z -u /ipfs fusermount -z -u /ipns
Então reinicie o ipfs.
Adicionar serviço
Obviamente, o lançamento no terminal é adequado apenas para testes primários. No modo de combate, o daemon deve iniciar automaticamente quando o sistema iniciar.
Em nome do sudo, crie o arquivo /etc/systemd/system/ipfs.service e escreva para ele:
[Unit] Description=IPFS Daemon After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=simple ExecStart=/home/USERNAME/work/bin/ipfs daemon --mount User=USERNAME Restart=always [Install] WantedBy=multi-user.target
USERNAME, é claro, deve ser substituído pelo seu usuário (e talvez o caminho completo para o programa ipfs seja diferente para você (você deve especificar o caminho completo)).
Ativamos o serviço.
sudo systemctl enable ipfs.service
Iniciamos o serviço.
sudo service ipfs start
Verifique o status do serviço.
sudo service ipfs status
Para a pureza do experimento, será possível reiniciar o servidor no futuro para verificar se o ipfs é iniciado com êxito automaticamente.
Adicione as festas que conhecemos
Considere a situação em que temos nós IPFS instalados em um servidor externo e localmente. Em um servidor externo, adicionamos algum tipo de arquivo e tentamos obtê-lo através do IPFS localmente pelo CID. O que vai acontecer? Obviamente, o servidor local provavelmente não sabe nada sobre o servidor externo e simplesmente tentará encontrar o arquivo pelo CID "pedindo" a todos os pares de IPFS disponíveis (com os quais ele já conseguiu "conhecer"). Esses, por sua vez, perguntarão aos outros. E assim, até que o arquivo seja encontrado. Na verdade, o mesmo acontece quando tentamos obter o arquivo através do gateway oficial
ipfs.io. Se você tiver sorte, o arquivo será encontrado em alguns segundos. E, se não, não será encontrado em alguns minutos, o que afeta muito o conforto do trabalho. Mas sabemos onde esse arquivo aparecerá pela primeira vez. Então, por que não informamos imediatamente ao servidor local "Olhe lá primeiro"? Aparentemente, isso pode ser feito.
1. Vá para o servidor remoto e procure por ~ / .ipfs / config na configuração
"Identity": { "PeerID": "QmeCWX1DD7HnPSuMHZSh6tFuxxxxxxxxxxxxxxxx",
2. Executamos o status de ipfs do serviço sudo e procuramos entradas do Swarm, por exemplo:
Swarm announcing /ip4/ip__/tcp/4001
3. A partir disso, adicionamos o endereço geral no formato "/ ip4 / ip_seu_servidor / tcp / 4001 / ipfs / $ PeerID".
4. Para confiabilidade, através do nosso webui local, tentaremos adicionar esse endereço aos pares.

5. Se estiver tudo bem, abra a configuração local ~ / .ipfs / config, encontre "Bootstrap" nela: [...
e adicione o endereço recebido primeiro à matriz.
Reinicie o IPFS.
Agora adicione o arquivo ao servidor externo e tente solicitá-lo no local. Deve voar rápido.
Mas essa funcionalidade ainda é instável. Pelo que entendi, mesmo se especificarmos o endereço de ponto no Bootstrap, no decorrer do trabalho, o ipfs altera a lista de conexões ativas com os pares. De qualquer forma, uma discussão sobre isso e seus desejos sobre a possibilidade de indicar pares constantes está sendo realizada
aqui e parece
que deve adicionar alguma funcionalidade a ipfs@5.0+
Uma lista dos pares atuais pode ser visualizada no webui e no terminal.
ipfs swarm peers
Lá e lá, você pode adicionar seu banquete manualmente.
ipfs swarm connect "/ip4/ip__/tcp/4001/ipfs/$PeerID"
Até que você melhore essa funcionalidade, você pode escrever uma ferramenta para verificar se há uma conexão com o par desejado e, se não, adicionar uma conexão.
Raciocínio
Entre aqueles que já conhecem o IPFS, há argumentos a favor e contra o IPFS. Em princípio, o dia antes da
discussão de ontem me levou a cavar o IPFS novamente. E com relação à discussão mencionada acima: não posso dizer que sou totalmente contra alguns dos argumentos acima expressos (discordo apenas do fato de que um programa e meio programadores usam IPFS). Em geral, os dois têm a sua maneira (especialmente
comentários sobre cheques fazem você pensar). Mas se você deixar de lado a avaliação moral e legal, quem fará uma avaliação técnica dessa tecnologia? Pessoalmente, tenho algum tipo de sentimento interior de que "isso é necessário, com certeza, tem certas perspectivas". Mas por que exatamente, não há uma redação clara? Como se você olhar para as ferramentas centralizadas existentes, em muitos aspectos elas estão muito à frente (estabilidade, velocidade, capacidade de gerenciamento, etc.). No entanto, tenho um pensamento que parece fazer sentido e que dificilmente pode ser implementado sem esses sistemas descentralizados. É claro que realmente mudo de idéia, mas a formularia da seguinte maneira: o princípio de disseminar informações na Internet precisa ser alterado.
Eu vou explicar Se você pensa assim, agora nossas informações são disseminadas com o princípio "Espero que a pessoa para quem eu as transferi as proteja e não sejam perdidas ou recebidas por aqueles a quem não foram destinadas". Por exemplo, é fácil considerar vários serviços de correio, armazenamento em nuvem etc. E o que temos no final? No Habré Hub, a
Segurança da informação está na primeira linha e quase todos os dias recebemos notícias sobre outro vazamento global. Em princípio, tudo o mais interessante está listado no artigo <irony> wonderful </ irony> O
verão está quase no fim. Quase nenhum dado vazou . Ou seja, os principais gigantes da Internet estão se tornando maiores, estão acumulando cada vez mais informações, e esses vazamentos são uma espécie de explosões atômicas informacionais. Isso nunca aconteceu, e aqui novamente. Ao mesmo tempo, embora muitos entendam que existem riscos, eles continuarão a confiar em seus dados com empresas de terceiros. Em primeiro lugar, não há muita alternativa; em segundo lugar, eles prometem corrigir todos os buracos e isso nunca mais acontecerá.
Que opção eu vejo? Parece-me que os dados devem ser inicialmente distribuídos abertamente. Mas abertura neste caso não significa que tudo deve ser fácil de ler. Estou falando da abertura de armazenamento e distribuição, mas não da abertura total na leitura. Presumo que as informações devem ser distribuídas com chaves públicas. Afinal, o princípio das chaves públicas / privadas já é antigo, quase como a Internet. Se a informação não é confidencial e foi projetada para uma ampla variedade, ela é apresentada imediatamente com a chave pública (mas ainda na forma criptografada, qualquer pessoa pode descriptografá-la com a chave existente). E, se não, é apresentada sem uma chave pública, e a própria chave é transmitida àquele que deve ter acesso a essas informações. Ao mesmo tempo, quem precisa lê-lo deve ter apenas uma chave e, onde obter essas informações, não deve pairar realmente - ele apenas as extrai da rede (esse é o novo princípio de distribuição para o conteúdo e não para o endereço).
Assim, para um ataque em massa, os invasores precisarão obter um grande número de chaves privadas, e é improvável que eles possam fazer isso em um só lugar. Essa tarefa, a meu ver, é mais difícil do que invadir um serviço específico.
E aqui outro problema se fecha: confirmação de autoria. Agora, na Internet, você pode encontrar muitas citações escritas por nossos amigos. Mas onde está a garantia de que eles os escreveram? Agora, se cada uma dessas gravações fosse acompanhada por uma assinatura digital, seria muito mais simples. E não importa onde estejam essas informações, o principal é a assinatura, que, obviamente, é difícil de falsificar.
E aqui está o que é interessante aqui: o IPFS já possui ferramentas de criptografia (afinal, ele é construído sobre a tecnologia blockchain). A chave privada é especificada imediatamente na configuração.
"Identity": { "PeerID": "QmeCWX1DD7HnPSuMHZSh6tFuMxxxxxxxxxxxxxx", "PrivKey": "CAASqAkwggSkAgEAAoIBAQClZedVmj8JkPvT92sGrNIQmofVF3ne8xSWZIGqkm+t9IHNN+/NDI51jA0MRzpBviM3o/c/Nuz30wo95vWToNyWzJlyAISXnUHxnVhvpeJAbaeggQRcFxO9ujO9DH61aqgN1m+JoEplHjtc4KS5 pUEDqamve+xAJO8BWt/LgeRKA70JN4hlsRSghRqNFFwjeuBkT1kB6tZsG3YmvAXJ0o2uye+y+7LMS7jKpwJNJBiFAa/Kuyu3W6PrdOe7SqrXfjOLHQ0uX1oYfcqFIKQsBNj/Fb+GJMiciJUZaAjgHoaZrrf2b/Eii3z0i+QIVG7OypXT3Z9JUS60 KKLfjtJ0nVLjAgMBAAECggEAZqSR5sbdffNSxN2TtsXDa3hq+WwjPp/908M10QQleH/3mcKv98FmGz65zjfZyHjV5C7GPp24e6elgHr3RhGbM55vT5dQscJu7SGng0of2bnzQCEw8nGD18dZWmYJsE4rUsMT3wXxhUU4s8/Zijgq27oLyxKNr9T7 2gxqPCI06VTfMiCL1wBBUP1wHdFmD/YLJwOjV/sVzbsl9HxqzgzlDtfMn/bJodcURFI1sf1e6WO+MyTc3.................
+ / NDI51jA0MRzpBviM3o / c / Nuz30wo95vWToNyWzJlyAISXnUHxnVhvpeJAbaeggQRcFxO9ujO9DH61aqgN1m + JoEplHjtc4KS5 "Identity": { "PeerID": "QmeCWX1DD7HnPSuMHZSh6tFuMxxxxxxxxxxxxxx", "PrivKey": "CAASqAkwggSkAgEAAoIBAQClZedVmj8JkPvT92sGrNIQmofVF3ne8xSWZIGqkm+t9IHNN+/NDI51jA0MRzpBviM3o/c/Nuz30wo95vWToNyWzJlyAISXnUHxnVhvpeJAbaeggQRcFxO9ujO9DH61aqgN1m+JoEplHjtc4KS5 pUEDqamve+xAJO8BWt/LgeRKA70JN4hlsRSghRqNFFwjeuBkT1kB6tZsG3YmvAXJ0o2uye+y+7LMS7jKpwJNJBiFAa/Kuyu3W6PrdOe7SqrXfjOLHQ0uX1oYfcqFIKQsBNj/Fb+GJMiciJUZaAjgHoaZrrf2b/Eii3z0i+QIVG7OypXT3Z9JUS60 KKLfjtJ0nVLjAgMBAAECggEAZqSR5sbdffNSxN2TtsXDa3hq+WwjPp/908M10QQleH/3mcKv98FmGz65zjfZyHjV5C7GPp24e6elgHr3RhGbM55vT5dQscJu7SGng0of2bnzQCEw8nGD18dZWmYJsE4rUsMT3wXxhUU4s8/Zijgq27oLyxKNr9T7 2gxqPCI06VTfMiCL1wBBUP1wHdFmD/YLJwOjV/sVzbsl9HxqzgzlDtfMn/bJodcURFI1sf1e6WO+MyTc3.................
7LMS7jKpwJNJBiFAa / Kuyu3W6PrdOe7SqrXfjOLHQ0uX1oYfcqFIKQsBNj / Fb + GJMiciJUZaAjgHoaZrrf2b / Eii3z0i + QIVG7OypXT3Z9JUS60 "Identity": { "PeerID": "QmeCWX1DD7HnPSuMHZSh6tFuMxxxxxxxxxxxxxx", "PrivKey": "CAASqAkwggSkAgEAAoIBAQClZedVmj8JkPvT92sGrNIQmofVF3ne8xSWZIGqkm+t9IHNN+/NDI51jA0MRzpBviM3o/c/Nuz30wo95vWToNyWzJlyAISXnUHxnVhvpeJAbaeggQRcFxO9ujO9DH61aqgN1m+JoEplHjtc4KS5 pUEDqamve+xAJO8BWt/LgeRKA70JN4hlsRSghRqNFFwjeuBkT1kB6tZsG3YmvAXJ0o2uye+y+7LMS7jKpwJNJBiFAa/Kuyu3W6PrdOe7SqrXfjOLHQ0uX1oYfcqFIKQsBNj/Fb+GJMiciJUZaAjgHoaZrrf2b/Eii3z0i+QIVG7OypXT3Z9JUS60 KKLfjtJ0nVLjAgMBAAECggEAZqSR5sbdffNSxN2TtsXDa3hq+WwjPp/908M10QQleH/3mcKv98FmGz65zjfZyHjV5C7GPp24e6elgHr3RhGbM55vT5dQscJu7SGng0of2bnzQCEw8nGD18dZWmYJsE4rUsMT3wXxhUU4s8/Zijgq27oLyxKNr9T7 2gxqPCI06VTfMiCL1wBBUP1wHdFmD/YLJwOjV/sVzbsl9HxqzgzlDtfMn/bJodcURFI1sf1e6WO+MyTc3.................
Zijgq27oLyxKNr9T7 "Identity": { "PeerID": "QmeCWX1DD7HnPSuMHZSh6tFuMxxxxxxxxxxxxxx", "PrivKey": "CAASqAkwggSkAgEAAoIBAQClZedVmj8JkPvT92sGrNIQmofVF3ne8xSWZIGqkm+t9IHNN+/NDI51jA0MRzpBviM3o/c/Nuz30wo95vWToNyWzJlyAISXnUHxnVhvpeJAbaeggQRcFxO9ujO9DH61aqgN1m+JoEplHjtc4KS5 pUEDqamve+xAJO8BWt/LgeRKA70JN4hlsRSghRqNFFwjeuBkT1kB6tZsG3YmvAXJ0o2uye+y+7LMS7jKpwJNJBiFAa/Kuyu3W6PrdOe7SqrXfjOLHQ0uX1oYfcqFIKQsBNj/Fb+GJMiciJUZaAjgHoaZrrf2b/Eii3z0i+QIVG7OypXT3Z9JUS60 KKLfjtJ0nVLjAgMBAAECggEAZqSR5sbdffNSxN2TtsXDa3hq+WwjPp/908M10QQleH/3mcKv98FmGz65zjfZyHjV5C7GPp24e6elgHr3RhGbM55vT5dQscJu7SGng0of2bnzQCEw8nGD18dZWmYJsE4rUsMT3wXxhUU4s8/Zijgq27oLyxKNr9T7 2gxqPCI06VTfMiCL1wBBUP1wHdFmD/YLJwOjV/sVzbsl9HxqzgzlDtfMn/bJodcURFI1sf1e6WO+MyTc3.................
Não sou especialista em segurança e não sei exatamente como usá-lo corretamente, mas parece-me que essas chaves são usadas no nível de troca entre nós IPFS. E também
js-ipfs e projetos de exemplo como
orbit-db , nos quais o
orbit.chat funciona. Ou seja, teoricamente, cada dispositivo (móvel e não apenas) pode ser facilmente equipado com suas próprias máquinas de criptografia e descriptografia. Nesse caso, resta apenas a todos cuidar de manter suas chaves privadas e todos serão responsáveis por sua própria segurança, e não serão reféns de outro fator humano em algum gigante da Internet super popular.