Question

Nous développons un service qui acceptera une demande POST . Certaines des données POST devront être cryptées avant POST car elles seront stockées dans des champs masqués d'un formulaire.

L’application est écrite en C #, mais nous souhaitons que les clients tiers puissent s’y intégrer facilement. Nous constatons que la plupart des clients utilisent PHP, Classic ASP ou VB.Net.

Les tiers ne devraient effectuer que le chiffrement. Nous ferions le décryptage. Il n'y a pas de communication bidirectionnelle.

Quelles sont les combinaisons les plus compatibles d’algorithme de chiffrement, de mode de remplissage et d’autres options?

Était-ce utile?

La solution

En supposant que vous disposiez d'un moyen sûr de partager une clé (cryptage RSA, récupération via une liaison SSH ou HTTPS ou appel de l'autre développeur sur une ligne téléphonique sécurisée), l'un des principaux cryptages modernes (comme AES). , comme mentionné par @Ed Haber) conviendrait. J'appuie sa suggestion d'AES. Il devrait y avoir des bibliothèques pour PHP, VB, Ruby, etc.

Toutefois, rappelez-vous qu'avec "aucune communication à double sens". vous devrez trouver une méthode hors canal pour obtenir en toute sécurité la clé symétrique de la partie crypteuse.

Autres conseils

Si vous voulez dire qu'il devrait être impossible à des tiers de déchiffrer des données, utilisez un algorithme de chiffrement asymétrique tel que RSA. Cela permettra au tiers de chiffrer les données avec votre clé publique et vous seul pourrez alors déchiffrer les données avec votre clé privée, que vous ne divulguerez pas. Des implémentations de RSA devraient être disponibles pour toutes les langues que vous avez mentionnées.

Si vous ne vous souciez pas de savoir si un tiers peut déchiffrer les données, alors AES est la solution. Vous aurez une clé que vous partagez avec les tiers. Cette clé est utilisée à la fois pour le cryptage et le décryptage.

J'utiliserais AES pour le chiffrement de données en vrac et RSA pour chiffrer la clé AES. Si les données sont suffisamment petites, il suffit de chiffrer le tout avec RSA.

a déclaré Ed Haber

  

Je voudrais utiliser AES pour les données en vrac   chiffrement et RSA pour chiffrer le   Clé AES. Si les données sont assez petites   puis juste chiffrer le tout avec   RSA.

Je pense que c'est une bonne solution. Ce que je voudrais faire, c'est que votre application publie une API pour obtenir une clé publique RSA. Quand un tiers souhaite vous envoyer quelque chose, il obtient la clé publique. Il génère ensuite une clé de session pour effectuer le chiffrement en utilisant un chiffrement par bloc (c.-à-d. AES), et vous l'envoie par chiffrement avec votre clé publique. Vous décryptez la clé de session avec votre clé privée. Le tiers chiffre ensuite les données qu'il souhaite vous envoyer avec AES (à l'aide d'un schéma de remplissage que vous publiez également) et vous les envoie. Vous le déchiffrez à l'aide de la clé de session.

La méthode ci-dessus pose quelques problèmes. Étant donné que vous n'envoyez aucune information (autre que la publication de votre clé publique, vous ne pouvez pas contrôler la génération de la clé de session. Cela signifie que des tiers peuvent utiliser des méthodes très peu sécurisées pour générer la clé de session et vous ne le saurez jamais. Un deuxième problème Est-ce que tout le monde qui veut vous envoyer des données doit remplir les données pour AES de la même façon que vous le faites. Vous devrez donc vous assurer que tout le monde coordonne. Le deuxième problème n'est pas trop grave, mais le premier risque de poser problème surtout si vous ne faites pas trop confiance aux tiers pour générer de très bonnes clés de session à partir d'un bon générateur de nombres aléatoires cryptographiquement sécurisé

Vous pouvez très facilement implémenter votre propre cryptage bit basé sur une clé XOR. Avec un peu de réflexion et d’ingéniosité, vous pouvez proposer quelque chose qui convient mieux à votre application.

Voici un exemple 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 dispose des fonctions de chiffrement et de déchiffrement capables de gérer une gamme d’algorithmes et de codages, y compris l’AES recommandé ci-dessus.

Informations sur: http://www.cfquickdocs.com/cf8/? getDoc = chiffrer # chiffrer

Exemple de code rapide:

Key = generateSecretKey( 'AES' , 128 )

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

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

Des fonctionnalités similaires sont disponibles avec cette bibliothèque pour PHP :
http://www.chilkatsoft.com/p/php_aes.asp

... et Java, Python, Ruby et d’autres ...
http://www.example-code.com/java/crypt2_aes_matchPhp.asp
http://www.example-code.com/python/aes_stringEncryption.asp

On dirait que RSA est l'algorithme pour vous.

Pourquoi ne pas exposer votre serveur via HTTPS? Ainsi, tout client capable de gérer HTTPS peut utiliser le service en toute sécurité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top