JMixNet

[This page in English]

JMixNet é uma implementação em Java das chamadas Rede de Mistura de Chaum (em inglês MixNet). Ela é uma rede de comunicação anônima, projetada para prover anonimato em transferências de dados entre usuários da Internet. Esta implementação tem alta latência, e pode ser integrada em qualquer sistema que tenha requisitos de anonimato.

A JMixNet está sendo desenvolvida pelo Laboratório de Segurança em Computação (www.labsec.ufsc.br) da Universidade Federal de Santa Catarina (www.ufsc.br).


Descrição

A JMixNet utiliza a linguagem Java para implementar uma rede de comunicação anônima. Para isto, estão sendo usados alguns pacotes: Java NIO, Java SSL, e a Java Reflection API. Este projeto não utiliza banco de dados, e pode ser utilizado em qualquer SO que suporte o Java 1.4.
O objetivo do projeto é construir uma rede segura para prover serviços de anonimato, para permitir comunicações anônimas entre sistemas cliente. Estão sendo integradas mensagens criptográficas baseadas em PKI com conexões SSL entr eos servidores da JMixNet, e interfaces adequadas para os sistemas cliente. A principal funcionalidade provida consiste em uma forma de se enviar informações anônimas pela Internet. Isto não é limitado a e-mails ou navegação na web, mas pode ser utilizado em qualquer sistema com requisitos de anonimato.

Desenvolvimento

Atualmente o projeto pode apenas enviar mensagens anônimas, principalmente para uso em sistemas de votação digital. Há um protótipo operacional, cujo código fonte pode ser obtido para executar a rede de mistura.

Como executar

O primeiro passo para executar a rede de mistura é estabelecer uma PKI simples, na qual cada servidor deve ter um certificado assinado pela Autoridade Certificadora da JMixNet. O nome comum ( campo CN) do certificado deve ser o endereço IP do servidor.

Para criar a Autoridade Certificadora da JMixNet você deve:

  • Gerar a chave da Autoridade Certificadora da JMixNet (OpenSSL):

    openssl req -x509 -newkey rsa:1024 -keyout jmixnet_ca_key.pem -out jmixnet_ca.pem

  • Importar o certificado da AC no arquivo "$JREHOME/lib/security/cacerts" (Java keytool):

    keytool -import -alias jmixnetCA -file jmixnet_ca.cer -keystore cacerts

Para gerar os certificados de servidor (repita estes passos para cada servidor) você deve:

  • Gerar o par de chaves do servidor (Java keytool):

    keytool -genkey -alias serverKey -keystore JMixNetServer.keystore

  • Gerar o Certificate Signing Request do servidor (Java keytool):

    keytool -certreq -alias serverkey -keystore JMixNetServer.keystore -file serverReq.csr

  • Assinar o certificado do servidor (OpenSSL):

    openssl x509 -in serverReq.csr -out jmixnet_server66.cer -days 360 -req -CA jmixnet_ca.pem -CAkey jmixnet_ca_key.pem -CAcreateserial

  • Importar o certificado do servidor (Java keytool):

    keytool -import -alias serverKey -file jmixnet_server66.cer -keystore JMixNetServer.keystore -trustcacerts

O próximo passo é definir o arquivo de configuração da JMixNet (jmixnet.cfg). Este arquivo deve conter ao menos uma propriedade, a cadeia (chain) de servidores:

Exemplo: chain=192.10.15.66,192.10.15.67,192.10.15.68,192.10.15.69

Esta configuração indica quem é o primeiro servidor, servidores intermediários, e o último servidor. A JMixNet usa a porta TCP 1981 como padrão. A configuração da cadeis pode conter endereços IP ou nomes de domínio, incluindo "localhost".

Para executar a rede você precisa iniciar os servidores em ordem reversa, ou seja, iniciar o primeiro servidor, então o anterior, e assim por diante. O primeiro servidor da cadeia será o último a ser iniciado.

Como arquivo keystore padrão, a JMixNet usa o nome "JMixNetServer.keystore", e "jmixnet" como senha padrão do keystore. Para definir valores diferentes você pode usar as propriedades de configuração keyStoreLocation e keyStorePassword no arquivo de configuração.

Como o Java não dispões de muitos algoritmos criptográficos implementados no Cryptographic Service Provider padrão, nós sugerimos o uso de um provedor alternativo. Nós estamos usando o provedor do grupo Legion of The Bouncy Castle.