Pergunta

Estamos a desenvolver um serviço que vai aceitar um pedido POST. Alguns dos dados POST terá de ser criptografado antes do POST uma vez que irá ser armazenado em campos ocultos em um formulário.

O aplicativo é escrito em C #, mas queremos clientes de terceiros para ser capaz de se integrar facilmente com ele. Descobrimos que a maioria dos clientes usam PHP, ASP clássico ou VB.Net.

Os terceiros só deve estar fazendo a criptografia. Faríamos a descriptografia. Não há comunicação bidirecional.

O que são as combinações mais compatíveis do algoritmo de criptografia, modo de preenchimento e outras opções?

Foi útil?

Solução

Assumindo que você tem uma maneira segura de compartilhar uma chave (se a criptografia RSA disso, a recuperação ao longo de um SSH ou HTTPS link, ou callling o outro desenvolvedor em uma linha telefônica segura), qualquer um dos principais criptografias modernos (como AES , como mencionado por @Ed Haber) seria adequada. Eu faria segunda a sugestão da AES. Deve haver bibliotecas para PHP, VB, Ruby, etc.

No entanto, lembre-se que "sem comunicação de duas vias", você terá que encontrar um método de out-of-canal para obter de forma segura a chave simétrica para a festa de criptografia.

Outras dicas

Se você quer dizer que ele deve ser impossível para terceiros aos dados desencriptar, então você vai querer usar um algoritmo de criptografia assimétrica, como RSA. Este será o terceiro para criptografar dados com sua chave pública, e só então você pode descriptografar os dados com sua chave privada, que você não divulgar. Deve haver implementações de RSA disponíveis para todos os idiomas que você mencionou.

Se você não se importa se o terceiro pode descriptografar os dados, em seguida, AES é o caminho a percorrer. Você terá uma chave que você compartilha com a terceira partes. Esta chave é usada tanto para criptografia e descriptografia.

Gostaria de usar AES para a criptografia de dados em massa e RSA para criptografar a chave AES. Se os dados é pequeno o suficiente, então apenas criptografar a coisa toda com RSA.

Ed Haber disse

Gostaria de usar AES para a dados em massa criptografia e RSA para criptografar a AES Key. Se os dados é pequeno o suficiente em seguida, apenas criptografar a coisa toda com RSA.

Eu acho que esta é uma boa solução. O que eu gostaria de fazer é ter sua aplicação publicar uma API para obter uma chave RSA pública. Quando eu terceiros quer enviar-lhe algo que ele recebe a chave pública. Em seguida, ele gera uma chave de sessão para fazer a criptografia real usando uma cifra de bloco, (isto é AES), e envia a chave para você, criptografando com sua chave pública. Você desencriptar a chave de sessão com sua chave privada. O terceiro, em seguida, criptografa os dados que desejar enviar-lhe com AES (usando um esquema de preenchimento que você também publicar) e envia para você. Você decifrá-lo usando a chave de sessão.

Existem alguns problemas com o método acima. Desde que você não está enviando as informações (que não publicar a sua chave pública, você não pode controlar como a chave de sessão é gerado. Isto significa que terceiros podem usar formas muito inseguros para de gerar a chave de sessão e você nunca vai saber. Um segundo problema é todo mundo que quer enviar-lhe de dados tem dados almofada para AES, da mesma forma que você faz. Então você terá que certificar-se de cada um coordena. o segundo problema não é grande, mas o primeiro pode ser um problema especialmente se você não confia em terceiros tanto assim para gerar chaves de sessão muito bons a partir de uma boa criptograficamente segura gerador de números aleatórios

Você poderia muito facilmente implementar sua bits de criptografia próprio baseado no chave XOR. Com um pouco de reflexão e criatividade, você pode vir acima com algo que é mais do que adequado para sua aplicação.

Aqui está um exemplo PHP:

function XOREncryption($InputString, $KeyPhrase){

    $KeyPhraseLength = strlen($KeyPhrase);

    for ($i = 0; $i < strlen($InputString); $i++){

        $rPos = $i % $KeyPhraseLength;

        $r = ord($InputString[$i]) ^ ord($KeyPhrase[$rPos]);

        $InputString[$i] = chr($r);
    }

    return $InputString;
}

ColdFusion tem a criptografar e descriptografar funções capaz de lidar com uma série de algoritmos e codificações, incluindo a AES recomendado acima.

Informações em: http://www.cfquickdocs.com/cf8/? GetDoc = criptografar # Criptografar

Breve exemplo de código:

Key = generateSecretKey( 'AES' , 128 )

EncryptedText = encrypt( Text , Key , 'AES' , 'Hex' )

Text = decrypt( EncryptedText , Key, 'AES' , 'Hex' )

funcionalidade similar está disponível com esta biblioteca para PHP :
http://www.chilkatsoft.com/p/php_aes.asp

... e Java, Python, Ruby, e outros ...
http://www.example-code.com/java/crypt2_aes_matchPhp.asp
http://www.example-code.com/python/aes_stringEncryption.asp

Parece que RSA é o algoritmo para você.

Por que não ter o seu servidor exposto através de HTTPS? Dessa forma, qualquer cliente que pode lidar com HTTPS podem consumir o serviço de segurança.

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