Fundamentos do PRP · artigo 4

A Internet sabe onde, mas não sabe o quê

Endereços ajudam a encontrar servidores. Não demonstram que os bytes recebidos são o objeto que procurávamos.

Uma leitora recebe o mesmo documento de fornecedores em lugares diferentes. Ilustração conceitual gerada com IA.
Uma leitora recebe o mesmo documento de fornecedores em lugares diferentes. Ilustração conceitual gerada com IA.

Quando abrimos um endereço na Web, uma sequência conhecida começa. Um nome é consultado. A consulta conduz a um endereço IP. Pacotes seguem até uma máquina capaz de responder. Uma conexão protegida autentica o servidor e transporta os dados.

Ao final, recebemos bytes de um lugar que fomos capazes de alcançar.

Essa arquitetura responde muito bem a uma pergunta: onde devo procurar? Ela não responde, por si só, a outra: o que exatamente recebi?

TLS autentica uma relação com uma identidade reconhecida para determinado nome. Assinaturas podem autenticar publicações. Aplicações podem conferir checksums e formatos. A Internet atual não é incapaz de verificar dados. O ponto é mais preciso: a identidade do objeto normalmente não integra a referência usada para localizá-lo.

Por isso, endereço e objeto mudam juntos em nossa experiência cotidiana. Se o servidor muda, o caminho precisa ser atualizado. Se o domínio desaparece, a referência deixa de funcionar. Se duas máquinas oferecem o mesmo arquivo, o usuário confia que ambas entregam a mesma coisa por mecanismos externos ao endereço.

O endereço nos leva ao fornecedor. Não identifica necessariamente o que ele fornece.

Fornecedores em localizações diferentes oferecem os mesmos bytes, que o solicitante verifica por uma identidade de conteúdo comum.
Fornecedores em localizações diferentes oferecem os mesmos bytes, que o solicitante verifica por uma identidade de conteúdo comum.

O endereço acumula papéis demais

Uma URL pode indicar esquema, autoridade, caminho e parâmetros. Ela é uma ferramenta expressiva, mas sua interpretação depende de infraestrutura e de estado que podem mudar.

O domínio depende de resolução. O endereço IP representa uma localização lógica para encaminhamento. O caminho é interpretado pelo servidor. O conteúdo de hoje pode ser substituído amanhã sem que a URL mude. A mesma representação pode aparecer em outro endereço com uma URL diferente.

Nada disso é um defeito acidental. Referências mutáveis são úteis. Queremos que o endereço de um jornal mostre a edição atual e que o perfil de uma organização acompanhe suas novas publicações. O problema aparece quando uma referência mutável também precisa funcionar como prova permanente do objeto referido.

Um endereço pode continuar igual enquanto o conteúdo muda. Um conteúdo pode continuar igual enquanto todos os seus endereços mudam.

São identidades diferentes.

Quando os bytes participam do nome

Uma alternativa é derivar a referência do próprio conteúdo. Em sua forma mais simples, uma função criptográfica recebe os bytes e produz um resumo. Qualquer alteração relevante produz outro resultado. Quem já conhece a referência pode repetir o cálculo e comparar.

A ideia antecede o PRP. A RFC 6920 padronizou nomes baseados em hash para identificar recursos independentemente do servidor e verificar a correspondência entre o nome solicitado e os dados recebidos. Sistemas como o IPFS usam identificadores de conteúdo para referenciar dados sem incorporar ao identificador o lugar em que estão armazenados.

Essa mudança parece pequena, mas altera a relação de confiança.

Se três fornecedores apresentam bytes para a mesma identidade de conteúdo, o solicitante não precisa aceitar a palavra de cada um sobre o objeto. Ele verifica a correspondência. Um cache não precisa ser a origem. Uma réplica não precisa conservar o endereço da primeira cópia. O canal ainda precisa resistir a interferência e indisponibilidade, mas deixa de ser a única garantia de integridade do objeto.

A confiança exigida do lugar diminui porque o objeto participa de sua própria verificação.

Uma cópia não se torna outro objeto

No modelo orientado a localização, mover dados exige atualizar referências ou manter uma cadeia de redirecionamentos. No modelo orientado a conteúdo, cópias idênticas preservam a mesma identidade de conteúdo.

Isso permite separar três funções:

  • identificar: determinar qual sequência exata de bytes é procurada;
  • descobrir: encontrar candidatos que declaram poder fornecê-la;
  • transportar: obter os dados por algum caminho disponível.

O fornecedor pode mudar sem alterar o objeto. O transporte pode mudar sem alterar o objeto. Vários fornecedores podem coexistir sem receber poder para redefinir o objeto.

Essa separação também expõe uma diferença importante em relação ao artigo anterior. Bloquear uma localização pode tornar uma cópia inacessível por aquele caminho. Não revoga criptograficamente a identidade do conteúdo e não torna inválidas cópias obtidas de outros fornecedores.

Persistência, porém, não nasce de um identificador. Se ninguém conservar os bytes ou aceitar fornecê-los, o objeto continuará identificável e indisponível. Saber exatamente o que falta não faz o dado reaparecer.

Verificável não significa verdadeiro

Uma identidade de conteúdo responde a uma pergunta estreita: os bytes recebidos correspondem aos bytes comprometidos por esta referência?

Ela não prova quem criou o objeto. Não demonstra que uma notícia é verdadeira, que um programa é seguro, que uma imagem possui determinada licença ou que sua circulação é legítima. Também não informa, sozinha, por que alguém deveria confiar na referência inicial.

Essas perguntas pertencem a outras relações:

  • uma assinatura pode vincular uma declaração a um agente;
  • uma política pode autorizar acesso ou publicação;
  • metadados podem declarar tipo, título, autoria e licença;
  • uma referência controlada pode indicar qual versão é considerada atual;
  • mecanismos de descoberta podem localizar fornecedores;
  • decisões locais podem aceitar, ocultar ou rejeitar objetos.

Separar essas funções não as torna menos importantes. Torna cada decisão visível e verificável segundo a evidência apropriada, sem pedir que a localização circunstancial dos bytes represente todas elas ao mesmo tempo.

Um hash isolado ainda é insuficiente

Dizer “o hash deste arquivo” omite decisões necessárias. Qual algoritmo foi usado? Qual é o tamanho do resumo? O cálculo inclui apenas os bytes ou também um descritor? Como arquivos grandes são divididos? Como distinguir perfis que interpretam a mesma sequência de maneiras diferentes? Como verificar uma parte sem receber o objeto inteiro?

Um identificador interoperável precisa incorporar essas escolhas ou apontar inequivocamente para elas. Caso contrário, dois programas podem exibir o mesmo texto e calcular compromissos incompatíveis — ou aceitar interpretações que deveriam falhar.

Também existe uma consequência inevitável: conteúdo imutável não possui “edição no lugar”. Mudar um byte cria outra identidade de conteúdo. Essa propriedade preserva o passado, mas exige um mecanismo separado quando pessoas querem nomes estáveis para versões sucessivas.

Imutabilidade e atualização não são opostas. Elas ocupam camadas diferentes.

Conteúdo como caso de uso de ALIAS

No PRP, ALIAS é uma referência comum à qual múltiplos participantes independentes podem se associar. Seu texto pode representar um interesse, uma categoria de serviço ou um conteúdo específico. O protocolo define como esse texto é canonizado e transformado em uma referência SCIR da classe ALIAS.

Para encontrar um arquivo, a aplicação pode incluir nesse texto uma identidade de conteúdo definida por uma convenção compartilhada. Essa convenção determina como representar o algoritmo e o resumo criptográfico do objeto. Aplicações que usam o mesmo texto canônico e a mesma suite de referência formam o mesmo ALIAS, mesmo que estejam em máquinas ou redes diferentes.

Imagine três participantes que conservam cópias do mesmo documento. Eles podem se associar ao ALIAS correspondente. Quem procura o documento consulta essa referência e pode encontrar múltiplos candidatos. A aplicação escolhe um fornecedor, obtém os bytes e verifica sua correspondência com a identidade de conteúdo esperada. Se um fornecedor ficar indisponível, outro pode oferecer a mesma cópia sob a mesma referência.

A divisão de responsabilidades é direta: o PRP descobre participantes associados ao ALIAS; a aplicação define e verifica o conteúdo procurado. A suite usada para formar o ALIAS e o algoritmo usado para verificar o arquivo são escolhas distintas. Para transferências parciais ou simultâneas de vários fornecedores, as aplicações precisam compartilhar também as regras de divisão, recomposição e verificação dos blocos. Árvores de Merkle são uma opção para essa verificação.

Um participante pode se associar a um ALIAS sem possuir os bytes esperados. Por isso, a aplicação verifica o que recebe de cada fornecedor. Essa verificação permite usar réplicas e caches sem atribuir a eles autoridade para redefinir o objeto.

O nome que acompanha as versões

Pessoas raramente desejam memorizar identificadores criptográficos. Também querem perguntar pelo documento atual, pela última versão de um programa ou pela publicação mais recente de alguém.

A aplicação pode manter um ALIAS estável para encontrar participantes que distribuem as atualizações de uma publicação. Esses participantes fornecem, por exemplo, uma declaração assinada pelo editor indicando a identidade de conteúdo da edição atual. A aplicação confere a assinatura e as regras de versão antes de aceitar essa indicação. A autoridade vem da assinatura do editor; a associação ao ALIAS permanece aberta a múltiplos participantes.

O texto do ALIAS pode permanecer igual enquanto novas edições são anunciadas. Cada edição conserva sua própria identidade de conteúdo, permitindo verificar também cópias das versões anteriores.

Assim, “qual é a versão atual?” e “estes são os bytes daquela versão?” deixam de ser a mesma pergunta. A primeira depende de uma declaração atualizada. A segunda pode ser respondida localmente pela identidade de conteúdo.

Do lugar ao objeto

O artigo anterior mostrou como endereços se tornam substitutos imperfeitos para conteúdos, serviços e condutas. A identidade de conteúdo corrige uma parte dessa confusão: permite nomear e verificar o objeto sem torná-lo propriedade de uma localização.

Ela não elimina a rede subjacente, não garante disponibilidade e não decide políticas. Ainda precisamos encontrar agentes, escolher caminhos, estabelecer relações e avaliar declarações. Mas essas funções já não precisam fingir que o endereço de ontem é a identidade permanente de tudo o que passou por ele.

Quando sabemos o quê procuramos, podemos trocar o onde sem trocar o objeto.

O próximo artigo aplicará a mesma separação a pessoas e serviços. Se uma publicação não precisa pertencer ao servidor que a hospeda, por que a identidade de um agente deveria pertencer à plataforma que mantém sua conta?