Pergunta

Este é algo que eu sempre quis aprender. Quando eu projetar um sistema (software ou hardware) onde vários componentes comunicam uns com os outros, como posso implementar alguns criptografia simples ou outras características no protocolo para alguma segurança básica?

Eu posso mudar o protocolo de qualquer forma, desde que eu tenho de baixo nível baixo acesso à série de bytes que são transmitidos / recebidos.

Editar:. Estou interessado em programação incorporado, simples over-the-wire criptografia para segurança de protocolo

Foi útil?

Solução

Você diz "segurança básica", mas isso não significa muito. Qual é o seu modelo de ameaça? Que tipo de ataque que você está defendendo? Se você está transmitindo dados de cartão de crédito, então você está indo a necessidade de usar a criptografia robusta, como o RSA. Mas eu não posso pensar em um exemplo de que as necessidades "menos" proteção. Se você está preocupado com hackers desmontar seu código, já é game over - se é interessante ou valioso, eles vão cortá-lo. Se não, você perdeu tempo implementá-lo.

Outras dicas

A solução mais simples, de longe, é usar apenas uma tomada de SSL em vez de um normal, a la HTTPS / FTPS estilo.

Não há nenhuma diferença em tudo no protocolo entre HTTP e HTTPS, a única diferença é que eles operam em portas diferentes (80 vs 443 normalmente), e uma utilidades uma tomada normal, e os outros usos um SSL criptografado socket.

Do not implementar a criptografia básica no sentido de projetar-lo a partir do zero. É muito difícil de implementar corretamente a criptografia corretamente.

Em vez disso, concentre-se usando a criptografia disponível em sua plataforma ... qual é a sua plataforma?

EDIT:

Veja este SO pós para uma lista de criptografia alternativas, algumas das quais devem funcionar muito bem em um ambiente incorporado (por exemplo CryptoPP e TomCrypt ).

OAuth pode ser interessante para você, a fim de controle de acesso autorização entre várias APIs.

Se você quiser puramente um canal encriptado de dados, é melhor para a camada só que ontop do seu protocolo; passar por cima de SSL ou SSH.

Se você está fazendo embutidos programação então onde está a preocupação de criptografia?

Enquanto você estiver hospedado no mesmo processador, por exemplo, a criptografia é inútil.

Se você está preocupado entre os processadores no dispositivo, em seguida, criptografia pode ser difícil, como um DSP não vai necessariamente ter o espaço livre para qualquer criptografia de qualquer complexidade.

Se você quiser rápido, então um algoritmo simétrico é a sua melhor aposta, e há muitos que você pode fazer que são bons, como Blowfish ou IDEA. Você pode armazenar uma chave simétrica única, por isso, se eles podem levar o dispositivo à parte, apenas uma chave será descoberto, mas cada dispositivo deve ter a sua própria chave.

Apenas amarre cada chave para o número de série, de modo que se você está se comunicando com um servidor, em seguida, passar o número de série com o pacote e o servidor pode procurar a chave simétrica correta e decifrá-lo rapidamente.

Se você queria fazer uma criptografia de hardware rápido, para a minha tese MSEE I desenvolveu uma família de criptografia que utiliza cálculo ordem arbitrária, o que seria difícil de determinar a chave de como pode ser no circuito de hardware usando microstrip, como há nenhum processamento, seria amarrado diretamente antes de a antena e tudo vai sobre ele seria criptografada.

Existem muitas coisas a serem consideradas na concepção de um sistema seguro. Só para citar alguns:

  • Escolha de esquemas de criptografia simétrica / assimétricos
  • algoritmo de criptografia (AES, Blowfish, DES)
  • Escolha de protocolos conhecidos (por exemplo SSL)
  • gestão e distribuição Key
    • A chave mestra única (se cortado, todo o sistema é comprometido)
    • Key por dispositivo (distribuição de chaves pode ser mais difícil)
    • Proteger os canais de distribuição de chave
  • Será que um hacker em potencial têm fácil acesso a dispositivos de amostra (s)? Por exemplo. produtos de consumo, tais como X-box vs uma caixa trancada em uma central telefônica. É mais difícil para proteger contra hackers se o hacker tenha acesso físico.
  • fatores-social humana engenharia etc.
  • Um sistema é tão seguro quanto seu elo mais fraco.

Eu sugiro que você leia o material Bruce Schneier para começar.

OAuth é definitivamente uma consideração. Além disso, você pode querer considerar WS-Security . Ao transmitir através de um serviço Web, você manter tudo plataforma e agnóstico linguagem, e adicionando meio WS-Security que a criptografia e descriptografia estão na camada de aplicação (end-to-end). Então, enquanto você confia que as mensagens são seguras quando saem do remetente, você sabe que eles vão permanecer seguro até que o cliente realmente recebe a mensagem (o que significa que ele não vai ser descriptografado pelo servidor e depois passou para o cliente / receptor, mas após a aplicação de recepção tem a mensagem).

Então, basicamente você OAuth para fixar / autenticar as diversas aplicações, e WS-Security para proteger as mensagens que passam entre eles.

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