Pergunta

Quero discutir sobre o método OpenSSL Write e Read.
Suponha que eu tenha uma estrutura de dados como abaixo:

/-----------------------------------------------------\
|  my_header   |  PAYLOAD                             |
\-----------------------------------------------------/
       |                              |
      \ /                            \ /
 not encrypted                      encrypted

I think the proper algorithm would be like this :
   SEND:
   build my_header with my own header.
   encrypt PAYLOAD with encryption function
   attach my_header and PAYLOAD (encrypted) to one buffer
   send it using common POSIX function just like send or sendto
   RECV:
   using common POSIX function just like recv or recvfrom.
   extract my_header and PAYLOAD(encrypted)
   decrypt PAYLOAD with decryption function
   at last i got my_header and PAYLOAD(decrypted).

Como está sua abordagem se você enfrentar um problema como acima. Já que o OpenSSL criptografa todos os dados enviados para a função SSL_WRITE (CMIIW).

Obrigado.

Talvez, a pergunta apropriada seja: qual é a função de criptografia e descriptografia que pode ser usada para criptografar/descriptografar a carga útil no OpenSSL?.

Nenhuma solução correta

Outras dicas

Você pode realmente deixar o OpenSSL fazer muito do trabalho pesado para você.

Você pode criar suas primitivas de rede como antes e associar os descritores de arquivos a um contexto SSL aberto, que lidará com o aperto de mão, criptografia e descriptografia SSL. Estou encobrindo muitos detalhes, mas o código de exemplo no site da OpenSSL e neste livro:

http://www.amazon.com/network-security-openssl-john-viega/dp/059600270x

será muito instrutivo. O livro também está disponível online, mas acredito que você deve pagar para acessá -lo.

Na distribuição do OpenSSL, você pode encontrar muito código de amostra ilustrando exatamente como fazer isso.

Boa sorte.

O OpenSSL vem com uma biblioteca LibCrypto, que é comumente usada para executar criptografia independente fora de um contexto SSL.

http://www.openssl.org/docs/crypto/evp.html

Como alternativa, a parte biológica da biblioteca pode estar ainda mais próxima do que você deseja:http://www.openssl.org/docs/crypto/bio.html

Mas se você realmente pretende enviar isso pela rede, eu questionaria a segurança de deixar o cabeçalho não criptografado. A criptografia é mais do que privacidade, também se trata de garantir que os dados não tenham sido modificados em trânsito. Se alguém está em posição de monitorar seu tráfego, geralmente também está em posição de adulterar com ele.

Se você deseja que o cabeçalho não tenha conseguido para lê -lo no Wireshark para depuração, sugiro fazer um sinalizador em seu aplicativo para ativar/desativar totalmente a criptografia para uso em um ambiente de depuração.

Se você está construindo um protocolo criptografado, é exatamente assim que eu faria, assumindo my_header Contém informações suficientes e nada que, por si só, precisa ser mantido seguro, como a chave da sessão. Os pacotes de rede em nível baixo (consulte o TCPDUMP/libpCap) são apenas um char* ("string") e você extrai cabeçalhos diferentes, movendo -se ao longo da matriz, comprimentos diferentes - o que você está sugerindo soa assim.

Quando você usa o TLS/DTLS, você tem a opção: cifra todo o quadro, ou nada.

Se você deseja ter alguns dados não desenrolados no quadro, provavelmente não precisará de TLS/DTLs. No entanto, você pode usar o OpenSSL para calcular um hash do seu cabeçalho (usando o SHA ou qualquer outro algoritmo de hash relacionado) e adicioná -lo no final do quadro para evitar adulteração.

Para a parte cifrada do quadro, você terá que escolher entre algoritmos cifra simétrico e assimétrico. Mas sem saber o que você deseja alcançar, não posso realmente aconselhar sobre isso.

Lembre -se de que os algoritmos simétricos geralmente são mais rápidos, mas exigem uma troca -chave a princípio. Para fazer isso, você pode usar um algoritmo assimétrico, mas depois está reinventando TLS/DTLS;)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top