ลงนามและยืนยันข้อมูลด้วย Cloud KMS (แบบไม่สมมาตร)

1. ภาพรวม

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

สิ่งที่คุณจะได้เรียนรู้

  • วิธีเปิดใช้ Cloud KMS API
  • วิธีสร้างคีย์ริง
  • วิธีสร้างคีย์คริปโตสําหรับการรับรอง/การยืนยันแบบอสมมาตร

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

การตั้งค่าสภาพแวดล้อมด้วยตนเอง

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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

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

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

เริ่ม Cloud Shell

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

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

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

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

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

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"

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

$ gcloud kms keys create "my-asymmetric-signing-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "asymmetric-signing" \
    --default-algorithm "rsa-sign-pkcs1-4096-sha512"

5. ข้อมูลลายเซ็น

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

สร้างไฟล์ที่มีข้อมูลที่จะเซ็นชื่อและใช้gcloudเครื่องมือบรรทัดคำสั่งเพื่อเซ็นชื่อข้อมูลด้วยคีย์ Cloud KMS ดังนี้

$ echo "my-contents" > ./data.txt
$ gcloud kms asymmetric-sign \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-signing-key" \
    --version "1" \
    --digest-algorithm "sha512" \
    --input-file ./data.txt \
    --signature-file ./data.txt.sig

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

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

6. ยืนยันข้อมูล

เมื่อใช้คีย์แบบไม่สมมาตร 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-signing-key" \
    --output-file ./key.pub

ยืนยันลายเซ็นกับคีย์สาธารณะโดยใช้opensslเครื่องมือบรรทัดคำสั่ง ดังนี้

$ openssl dgst -sha256 \
    -verify ./key.pub \
    -signature ./data.txt.sig ./data.txt

คอนโซลจะพิมพ์ข้อความ "สําเร็จ" ซึ่งบ่งบอกว่าลายเซ็นดิจิทัลถูกต้อง

Verified OK

7. ยินดีด้วย

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

ล้างข้อมูล

หากสำรวจเสร็จแล้ว โปรดพิจารณาลบโปรเจ็กต์

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 ทั่วไป