เข้ารหัสและถอดรหัสข้อมูลด้วย Cloud KMS (อสมมาตร)

1. ภาพรวม

Cloud KMS คือบริการการจัดการคีย์ที่โฮสต์ไว้ในระบบคลาวด์ ซึ่งช่วยให้คุณจัดการคีย์การเข้ารหัสของบริการระบบคลาวด์ได้เช่นเดียวกับที่ทำภายในองค์กร ซึ่งรวมถึงการรองรับการเข้ารหัส การถอดรหัส การรับรอง และการยืนยันโดยใช้ประเภทคีย์และแหล่งที่มาที่หลากหลาย เช่น Cloud HSM สำหรับคีย์ที่สนับสนุนด้วยฮาร์ดแวร์ บทแนะนำนี้จะสอนวิธีเข้ารหัสและถอดรหัสข้อมูลโดยใช้คีย์ Cloud KMS แบบอสมมาตร

คุณจะได้เรียนรู้

  • วิธีเปิดใช้ Cloud KMS API
  • วิธีสร้างพวงกุญแจ
  • วิธีสร้าง CryptoKey สำหรับการเข้ารหัส/การถอดรหัสแบบอสมมาตร

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

  1. ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID ในภายหลัง

  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

เริ่มต้น Cloud Shell

ใน Codelab นี้ คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมเสมือนจริงแบบฟรีที่ทำงานบน Google Cloud จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก เรียกใช้คำสั่งทั้งหมดจาก Shell นี้ เว้นแต่จะมีคำแนะนำไว้เป็นอย่างอื่น

3. เปิดใช้บริการ Cloud KMS

ก่อนจะใช้ Cloud KMS คุณต้องเปิดใช้บริการในโปรเจ็กต์ของคุณก่อน คุณต้องดำเนินการนี้เพียงครั้งเดียวต่อโปรเจ็กต์เท่านั้น หากต้องการเปิดใช้บริการ Cloud KMS ให้เรียกใช้คำสั่งต่อไปนี้

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

การเปิดใช้อาจใช้เวลาไม่เกิน 1 นาที คําสั่งจะรายงานสําเร็จเมื่อเสร็จสมบูรณ์

4. สร้างคีย์ KMS

สร้างคีย์ริง Cloud KMS ใน Cloud KMS คีย์ริงคือคอลเล็กชันแบบตรรกะของคีย์การเข้ารหัส คีย์ริงมีข้อมูลเมตาเกี่ยวกับคีย์ต่างๆ เช่น ตำแหน่งของคีย์ สร้างคีย์ริงชื่อ my-keyring ในภูมิภาค global:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

ตอนนี้ให้สร้าง CryptoKey ชื่อ my-asymmetric-encryption-key ตามวัตถุประสงค์ asymmetric-encryption ภายในคีย์ริงที่คุณเพิ่งสร้าง

$ gcloud kms keys create "my-asymmetric-encryption-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "asymmetric-encryption" \
    --default-algorithm "rsa-decrypt-oaep-4096-sha512"

5. เข้ารหัสข้อมูล

เมื่อใช้คีย์แบบอสมมาตร Cloud KMS จะไม่เข้ารหัส แต่จะให้สิทธิ์เข้าถึงคีย์สาธารณะและเข้ารหัสข้อมูลโดยใช้คีย์สาธารณะนั้นผ่านวิทยาการเข้ารหัสคีย์สาธารณะ เมื่อใช้คีย์แบบอสมมาตร การเข้ารหัสจะทำแบบออฟไลน์ได้อย่างสมบูรณ์โดยไม่ต้องเข้าถึง Cloud KMS หรือ Google Cloud API อื่นๆ การเข้ารหัสจะดำเนินการโดยใช้เครื่องมือเข้ารหัส เช่น openssl หรือด้วยภาษาโปรแกรมหรือไลบรารีที่รองรับวิทยาการเข้ารหัสคีย์สาธารณะ

ดาวน์โหลดคีย์สาธารณะจาก Cloud KMS ดังนี้

$ gcloud kms keys versions get-public-key "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-encryption-key" \
    --output-file ./key.pub

สร้างไฟล์ที่มีข้อมูลเพื่อเข้ารหัสและใช้เครื่องมือบรรทัดคำสั่ง openssl เพื่อเข้ารหัสข้อมูลในไฟล์ ดังนี้

$ echo "my-contents" > ./data.txt
$ openssl pkeyutl -encrypt -pubin \
    -in ./data.txt \
    -inkey ./key.pub \
    -pkeyopt "rsa_padding_mode:oaep" \
    -pkeyopt "rsa_oaep_md:sha512" \
    -pkeyopt "rsa_mgf1_md:sha512" > ./data.txt.enc

ระบบจะบันทึกข้อมูลที่เข้ารหัส (หรือที่เรียกว่า "ข้อความเข้ารหัส") ใน data.txt.enc ในดิสก์ หากคุณเปิดไฟล์ data.txt.enc คุณจะสังเกตเห็นว่ามีอักขระแปลกๆ และไม่สามารถพิมพ์ได้ เนื่องจากข้อมูลผลลัพธ์อยู่ในรูปแบบไบนารี

เมื่อจัดเก็บข้อความเข้ารหัสในฐานข้อมูลหรือส่งโดยเป็นส่วนหนึ่งของคำขอ HTTP คุณอาจต้องเข้ารหัสข้อมูล กลไกการเข้ารหัสที่พบบ่อยที่สุดสำหรับข้อความเข้ารหัสคือ base64

Cloud KMS ไม่จัดเก็บข้อความธรรมดาที่คุณระบุ คุณต้องบันทึกข้อความเข้ารหัสนี้ในตำแหน่งที่ปลอดภัยเนื่องจากจะต้องใช้เพื่อดึงค่าข้อความธรรมดา

6. ถอดรหัสข้อมูล

ต่างจากการเข้ารหัส การถอดรหัสข้อมูลที่เข้ารหัสโดยใช้คีย์ Cloud KMS แบบอสมมาตรจะต้องใช้สิทธิ์เข้าถึงบริการ Cloud KMS แบบออนไลน์ ถอดรหัสข้อความเข้ารหัสจากไฟล์โดยใช้เครื่องมือบรรทัดคำสั่ง gcloud ดังนี้

$ gcloud kms asymmetric-decrypt \


    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-encryption-key" \
    --version "1" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

เครื่องมือบรรทัดคำสั่ง gcloud จะอ่านข้อความเข้ารหัสจากไฟล์และถอดรหัสโดยใช้ Cloud KMS โปรดทราบว่าตัวอย่างนี้ระบุอาร์กิวเมนต์ --plaintext-file เป็น - ซึ่งจะเป็นการสั่งให้ gcloud พิมพ์ผลลัพธ์ไปยังเครื่องชำระเงิน

คอนโซลจะพิมพ์ my-contents ซึ่งเป็นค่าข้อความธรรมดาเดียวกับไฟล์ด้านบน

7. ยินดีด้วย

คุณเปิดใช้ Cloud KMS API สร้างคีย์การเข้ารหัสแบบไม่สมมาตร และข้อมูลที่เข้ารหัสและถอดรหัสแล้ว Cloud KMS เป็นผลิตภัณฑ์ที่มีประสิทธิภาพและการเข้ารหัส/การถอดรหัสเป็นขีดฆ่าความสามารถเท่านั้น

ล้างข้อมูล

หากสำรวจเสร็จแล้ว โปรดลองลบโปรเจ็กต์

  • ไปที่คอนโซล Cloud Platform
  • เลือกโปรเจ็กต์ที่คุณต้องการปิดการทำงาน แล้วคลิก "ลบ" ที่ด้านบน การดำเนินการนี้จะกำหนดเวลาการลบโปรเจ็กต์

ดูข้อมูลเพิ่มเติม

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0