암호화 서비스

TL;박사


이 블로그를 다 읽은 후, 당신은 우리가 왜 암호화 서비스를 필요로 하는지에 대해 개술할 것입니다.또한 Python과 Hashicorp Vault를 사용하여 방금 배운 내용을 적용하기 위해 PoC를 구현할 것입니다.

개요


현재 일부 회사들은 은행이나 건강 정보 등 민감한 데이터를 처리한다.이는 안전 결함이 발생한 상황에서 이 회사가 법률, 재무, 불량 공관에 영향을 미칠 수 있다는 것을 의미한다.따라서 이러한 데이터를 저장하는 업계 표준 안내서(예를 들어 결제 카드 업계 데이터 보안 표준)가 있습니다.예를 들어 신용카드 데이터 저장과 관련이 있을 때 조직은 데이터베이스에 저장된 계정을 암호화해야 한다.

전송 중인 암호화


using a cloud provider은 정적 암호화를 빈틈없이 완성할 수 있지만 이동 서비스 시 데이터 처리가 까다로울 수 있습니다.예. 서비스 간에 보안 통신 채널(예: TLS)을 사용할 수 있지만 충분하지 않습니다.TLS를 사용할 때도 오류가 발생할 수 있는 것은 민감한 정보를 잘못 기록하는 것이다.이런 상황은 companies that are worth billions of dollars and with an awesome engineering team에게 발생할 수도 있다.

애플리케이션 수준에서 암호화 처리


이것은 가능한 것이다. 왜냐하면 매우 좋은 암호화 라이브러리가 있기 때문이다.그러나 개발자는 정확한 방식으로 실현해야 한다. (예를 들어 추천하지 않는 비밀번호를 사용하지 마라.)
그 밖에 한 회사가 Majestic Monolith을 실행하고 있을 수도 있지만, 다른 서비스가 당신의 메인 서비스와 상호작용을 할 수도 있습니다.이로 인해 다음과 같은 문제가 발생했습니다.
  • 여러 서비스가 민감한 데이터에 접근해야 한다면 어떻게 됩니까?
  • 어떤 서비스가 암호화 및/또는 복호화를 처리합니까?
  • 은 암호화 키를 어떻게 처리하고 회전하며 분배합니까?
  • 열쇠가 누설되면 어떻게 합니까?
  • 키 관리 시스템 사용


    솔루션은 중앙 집중식 키 관리 시스템을 사용하여 중요한 데이터를 보호하는 것입니다.이것은 Hashicorp Vault, AWS KMS, Google CMK 등을 통해 이루어질 수 있습니다. 암호화와 복호화 책임을 이 서비스에 위탁하는 것이 목적입니다.Hashicorp Vault와 같은 솔루션을 사용하면 HTTPS API를 통해 애플리케이션 데이터를 암호화하고 복호화할 수 있습니다.즉,
  • 데이터는 정지 시
  • 암호화 가능
  • 데이터 전송 중 보안(TLS)
  • 키 처리 및 암호화 구현은 개발자
  • 이 아닌 Vault가 담당합니다.
  • 은 민감한 데이터와 상호작용하기 위해 더 많은 서비스를 추가할 수 있습니다
  • 그것은 어떻게 일합니까?



    소스 코드 here을 찾을 수 있습니다.
    보시다시피 저희는 3가지 서비스가 있습니다.

    미국 석유 학회


    이 응용 프로그램에서 이름과 PAN(주 계정)이 있는 신용카드를 만들 수 있습니다.모든 데이터는 암호화되어 저장되며 API는 사용하는 암호화 유형이나 복호화 방법을 알 수 없습니다.

    카드 프로세서


    이 서비스는 우리가 지금까지 만든 신용카드를 업무 논리에 따라 처리한다.API와 마찬가지로 암호화나 복호화에 대해 아무것도 모른다.

    금고


    이 서비스는 API로 이루어진 암호화와 카드 프로세서 서비스로 이루어진 복호화를 처리합니다.향후 새로운 서비스가 추가될 경우 암호화 또는 복호화와 관련된 모든 것이 Vault에 100% 의존하게 됩니다.가장 좋은 것은 다른 서비스는 아무런 변화가 없을 것이다.

    어떻게 실행합니까

    docker-compose up --build만 하면 너는 마땅히 준비를 다 해야 한다.

    프로비저닝


    다음 스크립트를 실행합니다.
    ./bin/vault.sh
    
    방금 세 가지 일이 발생했다.
  • 수송기 밀엔진이 활성화되었습니다.이것은 vault에 데이터를 저장하지 말고'암호화 즉 서비스'기능을 사용하도록 알려 줍니다.
  • 개의 영패가 생성되었습니다.이 프로그램은 암호화와 복호화에 사용됩니다.
  • 이 대칭 키를 생성했습니다.이것은 각자의 데이터를 암호화하고 복호화하는 데 쓰인다.
  • 출력 값에서 token을 가져와 VAULT_TOKEN env var로 넣습니다.
  • app/settings.py
  • card_processor.py
  • 신용카드 API 사용


    다음 본문을 통해 http://localhost:8000/credit-cards/에 POST 요청을 보냅니다.
    {
        "name":"Carlos Gardel",
        "pan":"4539296620131157"
    }
    
    만약 모든 것이 순조롭다면, 암호화된 메인 계정 (pan) 을 받을 것입니다.
    {
        "name": "Carlos Gardel",
        "pan": "vault:v1:JnC8pS/zmHhHPGd7dk5eCGilnUi8odvRIBP9Z+rBmMLAWXJ/dgYqGAU4MTk="
    }
    
    http://localhost:8000/credit-cards/에 GET 요청을 해도 암호화된 PAN 필드가 표시됩니다.

    카드 프로세서 서비스 사용


    이제 card_processor.py 서비스를 이용하여 이 카드를 처리하겠습니다.
    python3 card_processor.py
    
    우리는 이 카드가 성공적으로 복호화되고 처리된 것을 볼 수 있을 것이다.
    Processing CARLOS GARDEL card with number 4539296620131157
    

    회전 키


    열쇠 유출 위험을 최소화하기 위해 Vault 회전 열쇠를 알려 드리겠습니다.
    ./bin/rotate.sh
    
    만약 우리가 신용카드 응용 프로그램에 다른 POST 요청을 실행한다면, 우리는 v2을 사용하여 암호화를 실행하는 것을 볼 수 있을 것이다.
    {
        "name": "Aníbal Troilo",
        "pan": "vault:v2:vdIlXggLzrM4n5Xlzxh6a/xpmd7yz/F9MsoifuR/kmOodGKV5wPaWvMMiEw="
    }
    
    다른 암호화 키 버전 (v1 및 v2)을 살펴보겠습니다.
    [
        {
            "name": "Carlos Gardel",
            "pan": "vault:v1:JnC8pS/zmHhHPGd7dk5eCGilnUi8odvRIBP9Z+rBmMLAWXJ/dgYqGAU4MTk="
        },
        {
            "name": "Aníbal Troilo",
            "pan": "vault:v2:vdIlXggLzrM4n5Xlzxh6a/xpmd7yz/F9MsoifuR/kmOodGKV5wPaWvMMiEw="
        }
    ]
    
    card_processor.py 서비스로 돌아가겠습니다.지금 우리는 이 두 항목을 복호화하고 처리할 수 있다.하나는 v1으로, 다른 하나는 v2으로 복호화한다.
    Processing CARLOS GARDEL card with number 4539296620131157
    Processing ANÍBAL TROILO card with number 2720997130887021
    
    봐봐.암호화 키 및 회전은 Vault에서 처리됩니다.

    한층 더 고려하다


    우리의 생산은 준비가 되었습니까?


    나는 그렇게 생각하지 않는다.
  • 저희는 루트 영패
  • 을 사용하고 있습니다.
  • TLS 및 Vault 및 서비스 간 통신
  • 구현되지 않음
  • 금고는
  • 을 밀봉해야 합니다
  • 우리는 금고 서비스가 믿을 만하다는 것을 확보해야 한다(K8s라고 하십니까?)
  • 오픈 소스 vs 클라우드 공급자 솔루션


    당신은 스스로 위탁 관리하는 소스 개발 해결 방안을 처리하고 싶습니까, 아니면 각자의 클라우드 공급업체의 해결 방안을 더욱 처리하고 싶습니까?

    그것을 싸라


    만약 당신이 토론하거나 실시를 질의하고 싶다면, 나는 기꺼이 이렇게 할 것입니다.댓글을 남기거나 연결해 주세요.

    참고 문헌:

  • https://m.signalvnoise.com/the-majestic-monolith/
  • https://blog.deurainfosec.com/credit-card-primary-account-number-and-encryption/
  • https://www.zdnet.com/article/monzo-admits-to-storing-payment-card-pins-in-internal-logs/
  • https://aws.amazon.com/about-aws/whats-new/2019/02/amazon-dynamodb-adds-support-for-switching-encryption-keys-to-encrypt-your-data-at-rest/
  • 좋은 웹페이지 즐겨찾기