자체 ProtonMail 버전을 작성합니다.

나는 ProtonMail를 나의 메일 공급자로 사용한 지 이미 한동안 되었다.만약 네가 모른다면, 너는 반드시 명확하게 한 번 보아야 한다.메일은 끝까지 암호화되어 있습니다. 이것은 Proton Mail에 메일을 저장할 수 있는 읽을 수 있는 버전도, 복호화 키도 없다는 것을 의미합니다.
그러나 ProtonMail은 전자메일을 내보내거나 내보낼 수 있는 능력을 허용하지 않는다는 점에 주의해야 한다.예를 들어 백업을 하거나 다른 공급업체로 옮기려면 곤경에 빠질 수 있습니다.이것이 바로 내가 너에게 Proton Mail 같은 마력을 가져다 줄 수 있는 도구를 개발한 이유다.이 도구를 개발하기 위해서, 우리는 아주 좋은 라이브러리를 사용할 것입니다. OpenPGP.js Proton Mail에서 유지보수합니다.😉.
비대칭 암호의 원리를 알고 있다면 OpenPGP를 어떻게 사용하는지 보여 드리겠습니다.js는 개인 키와 공공 키 생성을 처리하는 아주 간단한 방법을 제공합니다. 물론 암호화/복호화 메시지도 있습니다.비대칭 암호화 기술이 무엇인지, 어디서 사용되는지 모르면, 본고는 아주 간단한 예를 통해 비대칭 암호화 기술이 도대체 무엇인지 발견할 수 있는 기회가 될 수 있습니다.그 다음에 Asymmetric Cryptography에 관한 아주 좋은 강좌를 보면 도움이 될 것입니다.

키 생성
기초부터 시작합시다!누군가에게 암호화된 데이터를 보내거나 수신하려면 키가 필요합니다. 더 정확히 말하면 키 한 쌍입니다.개인 키는 데이터 복호화에 사용됩니다. (당신만 가지고 있습니다. 매우 기밀입니다.)🤐), 공개 키는 데이터를 암호화하는 데 사용될 것입니다. (친구에게 암호화된 데이터를 보낼 수 있도록 보내야 합니다.)
이 점을 실현하는 가장 간단한 방법은 같은 디렉터리에 두 개의 다른 파일을 만드는 것이다.파일 중 하나에서 명령npm init -ynpm install openpgp을 실행합니다.그런 다음 두 파일에서 다음과 같이 모듈을 가져옵니다.
var openpgp = require('openpgp');
다음 예제에서는 각 파일이 암호화된 메시지를 서로 보내려는 사람을 나타낸다(Alice 및 Bob)는 상상을 합니다.
그래서 우리 키를 생성합시다!Alice 파일에서 다음 명령을 실행합니다.
var options = {
    userIds: [{ name: 'Alice', email: '[email protected]' }],
    curve: 'ed25519',
    passphrase: 'secret',
  }
  var publicKey, privateKey;
  openpgp.generateKey(options).then((key) => {
    privateKey = key.privateKeyArmored
    publicKey = key.publicKeyArmored
    console.log(privateKey);
    console.log(publicKey);
  })
키 생성 과정은 몇 초가 걸릴 수 있습니다.키 생성은 때때로 상당히 긴 과정일 수도 있다.
따라서 만약 위의 코드가 비동기적으로 실행된다면, 메인 라인은 키가 생성되지 않을 때까지 다른 작업을 할 수 있을 것이다. 그러면 다행이다.
이제 키를 생성할 때 두 개의 키 (base-64에서) 를 볼 수 있습니다. 각각 다음과 같이 시작합니다.
"----PGP 공개 키 블록 시작 ------"&
"----PGP 개인 키 블록을 시작합니다--------."
위의 코드에서, 당신은 d25519가 어떤 곡선인지 알고 싶을 것입니다. 왜 우리가 그것을 필요로 합니까?
커브ECC 커브의 이름(😯). ECC는 타원 커브 암호를 나타냅니다.더 많은 정보를 알고 싶다면, 놀라운 Blog post by Cloud Flare 과 그들이 왜 ECC를 사용하여 모든 것을 보호하는지, 고객의 HTTPS에서 그들이 데이터 센터에 어떻게 연결하여 데이터를 전달하는지 볼 수 있다.

암호화된 메시지
앞에서 논의한 바와 같이 공개 키는 모든 사람에게 데이터를 암호화하여 그들이 데이터를 공유할 수 있도록 보낼 수 있다.이제 암호화를 위해 Alice 공개 키를 Bob 파일의 변수 중 하나로 복사합니다.
var alicePublicKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: OpenPGP.js v4.10.8
Comment: https://openpgpjs.org

Zgf7TT22Xa0icFFTHKm0k+MzNvIMIQ
+80dUmljaGFyZCA8cmljaGFyZEBleG

-----END PGP PUBLIC KEY BLOCK-----`;

싱글 또는 더블 따옴표 대신 반대쪽 따옴표를 사용합니다. 여러 줄에 문자열을 쓸 수 있기 때문입니다.
Bob에 Alice 공개 키가 있는 이상 Bob은 Alice에 메시지를 보내려고 합니다.이제 시작하겠습니다.
(async () => {
var options = {
    message: openpgp.message.fromText('Hello, Alice!'),
    publicKeys: (await openpgp.key.readArmored(alicePublicKey)).keys
}
const { data: encrypted } = await openpgp.encrypt(options);
console.log(encrypted);
})();
암호화된 메시지를 보려면 "----PGP 메시지 시작--------"으로 시작해야 합니다.이것이 바로 밥이 지금 앨리스에게 보낼 수 있는 데이터다!
이 메시지를 Alice 파일로 복사합니다.
var bobEncryptedMessage = `-----BEGIN PGP MESSAGE-----
Version: OpenPGP.js v4.10.8
Comment: https://openpgpjs.org

heLBX8Pq0kUBwQz2iFAzRwOdgTBvH5KsDU9lmE

-----END PGP MESSAGE-----

메시지 복호화
Bob 정보를 암호화하려면 Alice의 개인 키와 비밀번호만 필요합니다.
이제 Alice의 개인 키 및 암호 구문을 저장하겠습니다. -
var alicePrivateKey = `-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: OpenPGP.js v4.10.8
Comment: https://openpgpjs.org

xYYEX3Nx8RYJKwYBBAHaRw8BAQdAQyUny
bt14J+kXuzDAc/v3TLnjoq2UxLD
-----END PGP PRIVATE KEY BLOCK-----`;

var passphrase = "secret";
참고: 위의 암호 구문은 키를 생성할 때 입력한 암호 구문과 같아야 합니다.
이제 bob에서 보낸 메시지를 복호화해 보겠습니다.
(async () => {
    const { keys: [privateKey] } = await openpgp.key.readArmored(alicePrivateKey);
    await privateKey.decrypt(passphrase);

    var options = {
    message: await openpgp.message.readArmored(bobEncryptedMessage),  
    privateKeys: [privateKey]  
    }
    const { data: decrypted } = await openpgp.decrypt(options);

    console.log(decrypted);
})();
bob에서 보낸 메시지가 나타납니다.
그렇습니다.우리는 이미 OpenPGP를 사용하여 자신을 위해 누드 원형을 만들었다.나는 이 문장이 당신에게 자신의 Proton Mail 버전을 만드는 것이 상당히 쉽다는 것을 믿게 할 수 있기를 바랍니다.
또한 향후 애플리케이션에서 OPENPGP를 사용할 수 있습니다.마지막: OpenPGP.js는 Node와 함께 사용할 수 있습니다.js (보시다시피) 는 브라우저의 클라이언트에 직접 있습니다:)

주의: 위 코드의 키를 수정했습니다.생성한 키는 64비트가 될 것입니다. 따라서 상기 예시된 키 대신 사용하십시오.
에셋: -
1. OPENPGP.JS
2. 블로그 작가Cloud Flare
3. What is OpenPGP

좋은 웹페이지 즐겨찾기