Twilio 및 Virgil 보안을 사용하여 메시지를 끝까지 암호화하는 방법

개발자가 끝까지 암호화해야 하는 데는 여러 가지 이유가 있다. 제품 내의 데이터가 HIPAA와 GDPR에 부합되는지, 개발자가 데이터 유출에 대한 책임을 제한하기 위해서, 사용자의 프라이버시를 보호하기 위해서, 그리고 더 많은 경제적, 도덕적 이유에서이다.Virgil Security는 개발자가 목표를 달성하도록 도와줍니다.
이 기술 강좌에서는 Twilio 채팅 응용 프로그램에서 끝까지 암호화를 구축하는 방법을 안내합니다.HIPAA 준수 및 Twilio와 Virgil의 상호 작용 방법에 대한 자세한 내용은 개요here를 참조하십시오.

엔드 투 엔드 암호화란 무엇입니까?


이것이 바로 오늘의 전형적인 Twilio 응용 프로그램의 모습이다.

암호화에 빈틈이 있습니다. HTTPS 및 정적 암호화가 시작되고 중지됩니다.프론트와 백엔드 서버에서 개발자와 해커는 여전히 명문 데이터에 접근할 수 있다.이 밖에 정부, 인터넷 서비스 제공자, 전신회사에서 이 데이터를 볼 수 있다.설령 당신이 이 사람들을 믿는다 하더라도, 그들이 그것을 방문할 수 있도록 하는 기술 메커니즘이 있다면, 누구나 이런 기술 메커니즘을 이용할 수 있다.
기본적으로 Twilio 프로그래밍 가능한 채팅은 전송 과정에서 HTTPS로 암호화되어 있습니다.엔드 투 엔드 암호화는 HIPAA, GDPR 등의 규정 준수 및 세계 각지 정부가 채택하고 있는 수많은 기타 보안 및 개인 정보 보호 법률을 충족하는 데 도움이 되는 추가 보안 계층입니다.감독 기구는 프라이버시에 더욱 관심을 기울이고 더욱 높은 안전 수준을 요구하는 법률을 통과시켰다.HTTPS만으로는 업계 또는 지리적 규제 환경에 따라 부족할 수 있습니다.
그 밖에 atwo year study in the UK found that 88% of data breaches were caused by developer error, not cyberattacks.따라서 만약에 귀하의 데이터가 끝까지 암호화되지 않았다면 제3자 서비스의 개발자가 귀하의 데이터에 접근하기만 하면 실시 오류를 범하거나 낚시 이메일을 누르면 전체 데이터베이스가 파괴될 수 있습니다.엔드 투 엔드 암호화는 개발자가 오류와 해커의 공격을 받지 않도록 보호하는 최상위층이다.
이것은 클라이언트에서 끝까지 암호화를 구현한 응용 프로그램의 모양입니다.

메시지 데이터는 최종 사용자가 메시지를 열고 장치에서 복호화할 때까지 터미널 장치에서 암호화되고 전송되고 저장되는 모든 곳에서 암호화됩니다.귀하, Twilio 및 모든 네트워크, 서버, 데이터베이스 또는 제3자 서비스는 혼란스러운 데이터만 볼 수 있습니다.

나는 끝까지 무엇을 암호화할 수 있습니까?


모든 내용 - 채팅 정보, 파일, 사진, 사물인터넷 장치의 감각 데이터, 영구 또는 임시 데이터.문서의 일부 필드는 암호화할 수 있지만 다른 필드는 암호화할 수 없습니다.예를 들어 채팅 프로그램과 관련된 양성 정보(예를 들어 타임 스탬프)를 명문으로 보존하고 메시지 내용을 끝까지 암호화하기를 원할 수 있습니다.

나는 어떻게 그것을 실현해야 합니까?


다음은 귀하가 그 작업 원리를 이해할 수 있도록 실현 절차에 대한 개술을 제공할 것입니다.일단 create a Virgil Security developer account 대시보드에 있는 E3Kit for Twilio end-to-end encryption guide(E3Kit for Twilio 끝에서 끝까지 암호화 안내서)를 따르면, 전체 코드는 Virgil Security dashboard에서 찾을 수 있습니다.
클라이언트 E3Kit SDK를 사용하면 사용자가 등록할 때 응용 프로그램이 장치에 개인 키와 공개 키를 생성합니다.사용자의 공개 키는 다른 사용자의 공개 키를 찾아 암호화할 수 있도록 Virgil Cards 서비스 (실제로는 공개 키를 저장하고 관리하는 클라우드 디렉터리) 에 발표됩니다.모든 사용자의 개인 키는 장치에 유지되고 운영체제의 기본 키 저장소의 보호를 받는다.

1단계: 백엔드 설정


Virgil 클라우드에서 사용자를 식별하고 검증하기 위해서는 서버 측의 Virgil SDK와 Twilio Helper의 도움으로 Virgil과 Twilio JWT를 생성해야 합니다.Virgil과 Twilio JWT 세대를 연결하는 방법을 보여 주는 백엔드 코드 예시를 만들었습니다.보기GitHub repo here 및 자술한 파일의 지침에 따라 조작합니다(자세한 설명은 보기this video.

2단계: 고객 설정


E3Kit는 장치에 사용자의 개인 키를 만들고 저장하며 Virgil 클라우드에서 사용자의 공개 키를 발표합니다.다른 모든 것(암호화 함수 제외)은 Twilio SDK에서 처리되며 클라이언트 initialize 에서 직접 처리해야 합니다.
참고: 이 코드 세션은 Javascript에 있지만 E3Kit는 모든 언어에서 작업할 수 있습니다.문서here에서 Java, Kotlin 및 Swift의 코드 세션을 찾을 수 있습니다.

A) 패키지 관리자를 사용하여 E3Kit SDK를 모바일 또는 웹 프로젝트에 다운로드


npm install -S @virgilsecurity/e3kit

B) E3Kit 초기화


Virgil과 Twilio 클라우드와 상호작용하기 위해서는 E3Kit SDK에 리셋을 제공해야 합니다. 리셋을 백엔드에서 현재 사용자에게Virgil과 Twilio JWT를 가져오도록 호출합니다.
import { EThree } from '@virgilsecurity/e3kit';

// This function returns a token that will be used to authenticate requests
// to your backend.
// This is a simplified solution without any real protection, so here you need use your
// application authentication mechanism.
async function authenticate(identity) {
    const response = await fetch('http://localhost:3000/authenticate', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            identity: identity
        })
    });
    if (!response.ok) {
        throw new Error(`Error code: ${response.status} \nMessage: ${response.statusText}`);
    }

    return response.json().then(data => data.authToken);
}

// Log in as `alice`
const eThreePromise = authenticate('alice').then(authToken => {
    // E3kit will call this callback function and wait for the Promise resolve.
    // When it receives Virgil JWT it can do authorized requests to Virgil Cloud.
    // E3kit uses the identity encoded in the JWT as the current user's identity.
    return EThree.initialize(getVirgilToken);

    // This function makes authenticated request to GET /virgil-jwt endpoint
    // The token it returns serves to make authenticated requests to Virgil Cloud
    async function getVirgilToken() {
        const response = await fetch('http://localhost:3000/virgil-jwt', {
            headers: {
                // We use bearer authorization, but you can use any other mechanism.
                // The point is only, this endpoint should be protected.
                Authorization: `Bearer ${authToken}`,
            }
        })
        if (!response.ok) {
            throw new Error(`Error code: ${response.status} \nMessage: ${response.statusText}`);
        }

        // If request was successful we return Promise which will resolve with token string.
        return response.json().then(data => data.virgilToken);
    }
});

// then you can get instance of EThree in that way:
eThreePromise.then(eThree => { /* eThree.encrypt/decrypt/lookupPublicKeys */})
// or
const eThree = await eThreePromise;

3단계: Virgil Security에 사용자 등록


// TODO: initialize

await eThree.register();

4단계: Twilio 채널 만들기


비길은 사용자 채널이나 메시지를 만들거나 관리하는 기능을 제공하지 않습니다.따라서 Twilio SDK를 사용하여 작성해야 합니다channel for user conversations.

단계 5: 메시지 데이터 서명 및 암호화


데이터 보안을 위해 메시지 데이터를 암호화하는 것 외에 E3Kit는 디지털 서명을 사용하여 데이터의 완전성을 검증한다.
// TODO: initialize and register user (see EThree.initialize and EThree.register)

// aliceUID and bobUID - strings with identities of users that receive message
const usersToEncryptTo = [aliceUID, bobUID];

// Lookup user public keys
const publicKeys = await eThree.lookupPublicKeys(usersToEncryptTo);

// Encrypt data using target user public keys
const encryptedData = await eThree.encrypt(new ArrayBuffer(), publicKeys);

// Encrypt text using target user public keys
const encryptedText = await eThree.encrypt('this text will be encrypted', publicKeys);

단계 6: 메시지 복호화 및 발송자 확인


메시지를 받은 후, 우리는 수신자의 개인 키를 사용하여 암호화를 해제하고, 메시지 서명에 발송자가 포함된 공개 키를 확인하여 메시지가 정확한 발송자로부터 왔는지 검증할 것입니다.
// TODO: initialize SDK and register users - see EThree.initialize and EThree.register

// bobUID - string with sender identity
// Lookup origin user public keys
const publicKey = await eThree.lookupPublicKeys(bobUID);

// Decrypt data and verify if it was really written by Bob
const decryptedData = await eThree.decrypt(encryptedData, publicKey);

// Decrypt text and verify if it was really written by Bob
const decryptedText = await eThree.decrypt(encryptedText, publicKey);
봐라!응용 프로그램에 암호화된 메시지가 있습니다.
우리가 언급한 바와 같이, Virgil E3Kit SDK는 다중 장치 지원을 지원합니다.비밀번호 변경 및 장치 정리와 같은 다른 기능에 대한 지원instructions for implementing that here을 찾을 수 있습니다.

HIPAA 규정 준수 고려 사항


의료 어플리케이션에 E3Kit를 추가하고 HIPAA 요구 사항을 충족하려면 메시지 전달 시 Twilio에서 메시지 데이터를 제거해야 합니다.Twilio와 Virgil Security를 사용하여 HIPAA에 맞는 채팅 애플리케이션을 구축하는 방법에 대한 자세한 내용은 안내서 here 에서 확인할 수 있습니다.

무슨 결점이 있습니까?

  • 엔드 투 엔드 암호화는 채팅 내역 검색과 같은 고급 기능에 대한 액세스를 취소할 수 있습니다.추가 보안을 구현하기 전에 비즈니스 요구 사항을 충족하는지 평가해야 합니다.(사용자가 데이터에 액세스하기 위해 개인 키를 가지고 있는 것처럼 관리자에게도 개인 키를 줄 수 있지만 HIPAA 및 기타 규정 준수에 어떻게 영향을 미치는지 조심스럽게 조작해야 합니다.)
  • 이와 유사하게 제3자 서비스는 귀하가 암호화한 데이터를 처리할 수 없습니다.분석을 실행하거나 다른 비즈니스 목적으로 액세스해야 하는 데이터가 있는 경우 암호화되지 않은 데이터로 유지하는 것을 고려하십시오.
  • 데이터를 암호화하고 복호화하면 성능에 경미한 영향을 미칠 수 있다.클라이언트 장치의 각 메시지의 길이는 약 1-2밀리초입니다.또한 고객이 이 메시지를 암호화하려면 네트워크 접근이 필요합니다. (사용자 키 검색은 온라인 작업으로 완료된 후에 캐시할 수 있습니다.)
  • E3Kit for Twilio를 사용하려면 dashboard.virgilsecurity.com 무료 Virgil Security 개발자 계정을 등록하여 첫 번째 응용 프로그램을 만들고 E3Kit for Twilio의 끝에서 끝까지 암호화된 빠른 시작 안내서를 따르십시오.E3Kit 문서도 https://developer.virgilsecurity.com/docs/e3kit/integrations/twilio/ 를 통해 직접 찾을 수 있습니다.
    문제수시로 Slack 전화를 걸어 비길 안전팀에 문의하세요.

    좋은 웹페이지 즐겨찾기