문제

우리는 POST 요구.일부 POST 데이터는 암호화되기 전에 암호화되어야 합니다. POST 양식의 숨겨진 필드에 저장되기 때문입니다.

애플리케이션은 C#으로 작성되었지만 우리는 타사 클라이언트가 쉽게 통합할 수 있기를 원합니다.대부분의 클라이언트는 PHP, Classic ASP 또는 VB.Net을 사용하는 것으로 나타났습니다.

제3자는 암호화만 수행해야 합니다.우리는 해독을 할 것입니다.양방향 통신이 없습니다.

암호화 알고리즘, 패딩 모드 및 기타 옵션의 가장 호환 가능한 조합은 무엇입니까?

도움이 되었습니까?

해결책

키를 안전하게 공유할 수 있는 방법(RSA 암호화, SSH 또는 HTTPS 링크를 통한 검색, 보안 전화선으로 다른 개발자에게 전화 등)이 있다고 가정하면, 앞서 언급한 AES와 같은 주요 최신 암호화 by @Ed Haber)가 적합할 것입니다.나는 AES에 대한 그의 제안을 두 번째로 생각합니다.PHP, VB, Ruby 등을 위한 라이브러리가 있어야 합니다.

그러나 "양방향 통신 없음"을 사용하면 암호화 당사자에게 대칭 키를 안전하게 가져오기 위한 채널 외부 방법을 찾아야 한다는 점을 기억하십시오.

다른 팁

제3자가 데이터를 해독하는 것이 불가능해야 한다는 의미라면 RSA와 같은 비대칭 암호화 알고리즘을 사용하는 것이 좋습니다.그러면 제3자가 귀하의 공개 키로 데이터를 암호화하게 되며, 귀하만이 공개하지 않는 개인 키로 데이터를 해독할 수 있습니다.언급한 모든 언어에 사용할 수 있는 RSA 구현이 있어야 합니다.

제3자가 데이터를 해독할 수 있는지 여부에 관심이 없다면 AES를 사용하는 것이 좋습니다.귀하는 제3자와 공유하는 하나의 키를 갖게 됩니다.이 키는 암호화 및 암호 해독에 모두 사용됩니다.

대량 데이터 암호화에는 AES를 사용하고 AES 키 암호화에는 RSA를 사용합니다.데이터가 충분히 작다면 RSA로 모든 것을 암호화하면 됩니다.

에드 하버가 말했다.

대량 데이터 암호화에 AES를 사용하고 AES 키를 암호화하려면 RSA를 사용합니다.데이터가 충분히 작 으면 RSA로 모든 것을 암호화하십시오.

나는 이것이 좋은 해결책이라고 생각합니다.제가 할 일은 귀하의 애플리케이션이 공개 RSA 키를 얻기 위한 API를 게시하도록 하는 것입니다.제3자가 당신에게 무언가를 보내려고 하면 공개 키를 얻습니다.그런 다음 블록 암호(예: AES)를 사용하여 실제 암호화를 수행하기 위한 세션 키를 생성하고 공개 키로 암호화하여 키를 사용자에게 보냅니다.개인 키를 사용하여 세션 키를 해독합니다.그런 다음 제3자는 귀하에게 보내려는 데이터를 AES(귀하가 게시하는 패딩 구성표 사용)로 암호화하여 귀하에게 보냅니다.세션 키를 사용하여 암호를 해독합니다.

위의 방법에는 몇 가지 문제가 있습니다.공개 키를 게시하는 것 외에는 어떤 정보도 보내지 않으므로 세션 키 생성 방법을 제어할 수 없습니다.이는 제3자가 세션 키를 생성하는 데 매우 안전하지 않은 방법을 사용할 수 있으며 귀하는 이를 결코 알 수 없음을 의미합니다.두 번째 문제는 데이터를 보내려는 모든 사람이 동일한 방식으로 AES용 데이터를 채워야 한다는 것입니다.따라서 모든 사람이 조화를 이루는지 확인해야 합니다.두 번째 문제는 그다지 크지 않지만 첫 번째 문제는 특히 제3자가 암호학적으로 안전한 우수한 난수 생성기에서 정말 좋은 세션 키를 생성한다고 신뢰하지 않는 경우 문제가 될 수 있습니다.

자신만의 XOR 키 기반 비트 암호화를 매우 쉽게 구현할 수 있습니다.약간의 생각과 독창성을 통해 귀하의 응용 분야에 매우 적합한 것을 생각해 낼 수 있습니다.

다음은 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에는 위에서 권장하는 AES를 포함하여 다양한 알고리즘과 인코딩을 처리할 수 있는 암호화 및 암호 해독 기능이 있습니다.

정보: http://www.cfquickdocs.com/cf8/?getDoc=encrypt#Encrypt

빠른 예제 코드:

Key = generateSecretKey( 'AES' , 128 )

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

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

이 라이브러리에서는 유사한 기능을 사용할 수 있습니다. PHP:
http://www.chilkatsoft.com/p/php_aes.asp

...그리고 Java, Python, Ruby 등...
http://www.example-code.com/java/crypt2_aes_matchPhp.asp
http://www.example-code.com/python/aes_stringEncryption.asp

RSA가 당신을 위한 알고리즘인 것 같습니다.

HTTPS를 통해 서버를 노출하지 않는 이유는 무엇입니까?이렇게 하면 HTTPS를 처리할 수 있는 모든 클라이언트가 서비스를 안전하게 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top