0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

URLs Ký ECDSA Trên CloudFront: Tăng Tốc 91% và Ngắn Hơn 55%

Đăng vào 1 ngày trước

• 4 phút đọc

👋 Giới thiệu

Vào ngày 9 tháng 9 năm 2025, Amazon CloudFront đã thêm hỗ trợ cho các khóa ECDSA (Elliptic Curve Digital Signature Algorithm) trong các URL ký. Trước đây, CloudFront chỉ hỗ trợ RSA-2048, nhưng giờ đây đã hỗ trợ ECDSA P-256 (prime256v1), cho phép tạo chữ ký nhanh hơn đáng kể và các URL ngắn hơn.

Bài viết này sẽ hướng dẫn bạn cách triển khai các URL ký ECDSA và so sánh hiệu suất với các khóa RSA truyền thống.

📌 Những Thay Đổi Mới

Thay Đổi Chính

  • CloudFront giờ đây hỗ trợ các URL ký ECDSA (P-256) bên cạnh RSA.
  • Tạo chữ ký nhanh hơn với mức tiêu thụ CPU thấp hơn.
  • Kích thước chữ ký nhỏ hơn, dẫn đến các URL ngắn hơn.
  • Cùng mức độ bảo mật như RSA nhưng hiệu suất tốt hơn.

Lợi Ích Dự Kiến

  • Hiệu suất: Tạo chữ ký nhanh hơn cho các kịch bản khối lượng lớn.
  • Hiệu quả: Giảm mức tiêu thụ CPU, lý tưởng cho các môi trường hạn chế tài nguyên.
  • Độ dài URL: Các URL ngắn hơn cho SMS, mã QR và các trường hợp nhạy cảm với độ dài khác.

Hướng Dẫn Triển Khai

1. Tạo Cặp Khóa

bash Copy
# Tạo khóa riêng ECDSA P-256
openssl ecparam -name prime256v1 -genkey -noout -out ecdsa-private.pem

# Tạo khóa công khai
openssl ec -in ecdsa-private.pem -pubout -out ecdsa-public.pem

# Để so sánh, tạo khóa RSA
openssl genrsa -out rsa-private.pem 2048
openssl rsa -pubout -in rsa-private.pem -out rsa-public.pem

2. Đăng Ký Khóa Công Khai với CloudFront

bash Copy
# Đăng ký khóa công khai ECDSA
ECDSA_KEY_CONTENT=$(cat ecdsa-public.pem)
ECDSA_KEY_RESPONSE=$(aws cloudfront create-public-key \
    --public-key-config \
    Name="ecdsa-signing-key",CallerReference="$(date +%s)",EncodedKey="$ECDSA_KEY_CONTENT",Comment="Khóa ECDSA P-256 cho các URL ký")

ECDSA_KEY_ID=$(echo $ECDSA_KEY_RESPONSE | jq -r '.PublicKey.Id')
echo "ECDSA Key ID: $ECDSA_KEY_ID"

3. Tạo Nhóm Khóa

bash Copy
# Tạo nhóm khóa ECDSA
ECDSA_KEY_GROUP_RESPONSE=$(aws cloudfront create-key-group \
    --key-group-config \
    Name="ecdsa-key-group",Items="$ECDSA_KEY_ID",Comment="Nhóm khóa ECDSA")

ECDSA_KEY_GROUP_ID=$(echo $ECDSA_KEY_GROUP_RESPONSE | jq -r '.KeyGroup.Id')

4. Cấu Hình Phân Phối CloudFront

⚠️ Lưu Ý Quan Trọng: Cập nhật cài đặt hành vi phân phối CloudFront của bạn.

  1. Truy cập tab "Hành vi" của phân phối của bạn.
  2. Chỉnh sửa hành vi liên quan.
  3. Đặt "Giới hạn quyền truy cập người xem" thành "Có".
  4. Đặt "Loại ủy quyền đáng tin cậy" thành "Nhóm khóa đáng tin cậy".
  5. Chọn nhóm khóa bạn đã tạo.

5. Tạo URLs Ký

Giới Hạn AWS CLI

⚠️ Quan trọng: Từ ngày 9 tháng 9 năm 2025, lệnh cloudfront sign của AWS CLI không hỗ trợ các khóa ECDSA và sẽ báo lỗi rằng đây không phải là khóa RSA.

bash Copy
# aws --version
# aws-cli/2.29.0 
# Lệnh này sẽ thất bại với các khóa ECDSA
aws cloudfront sign --url https://example.com/file.jpg \
    --key-pair-id $ECDSA_KEY_ID \
    --private-key file://ecdsa-private.pem \
    --date-less-than "2025-09-10T12:09:03Z"
# Lỗi: Không tìm thấy khóa riêng RSA trong PEM.

Triển Khai Python

Dưới đây là một triển khai Python hoạt động cho các URL ký ECDSA.

python Copy
# ecdsa_signer.py
import sys
import time
from botocore.signers import CloudFrontSigner
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives.serialization import load_pem_private_key
from cryptography.hazmat.backends import default_backend
import os
from datetime import datetime

def ecdsa_signer(message):
    with open("ecdsa-private.pem", "rb") as key_file:
        private_key = load_pem_private_key(
            key_file.read(), password=None, backend=default_backend()
        )
    return private_key.sign(message, ec.ECDSA(hashes.SHA1()))

def generate_signed_url(url, key_pair_id, date_less_than):
    start_time = time.time()

    cf_signer = CloudFrontSigner(key_pair_id, ecdsa_signer)
    signed_url = cf_signer.generate_presigned_url(
        url,
        date_less_than=datetime.fromisoformat(date_less_than.replace("Z", "+00:00")),
    )

    processing_time_ms = (time.time() - start_time) * 1000
    print(f"Thời gian xử lý ECDSA: {processing_time_ms:.2f}ms", file=sys.stderr)

    return signed_url

if __name__ == "__main__":
    url = sys.argv[1] if len(sys.argv) > 1 else "https://example.com/file.jpg"
    expiry_time = sys.argv[2] if len(sys.argv) > 2 else "2025-09-10T12:09:03Z"
    key_pair_id = os.environ.get("ECDSA_KEY_ID")

    signed_url = generate_signed_url(url, key_pair_id, expiry_time)
    print(signed_url)

So Sánh Hiệu Suất

Tôi đã chạy các bài kiểm tra hiệu suất so sánh việc tạo chữ ký RSA và ECDSA.

Tóm Tắt Kết Quả

Chạy Thử Trung Bình RSA Trung Bình ECDSA Cải Thiện Độ Lệch Chuẩn RSA Độ Lệch Chuẩn ECDSA
1 36.47ms 3.04ms 91.7% 0.00ms 0.00ms
10 35.93ms 3.00ms 91.6% 2.54ms 0.31ms
20 33.54ms 2.60ms 92.2% 0.98ms 0.21ms
100 34.39ms 2.91ms 91.5% 1.33ms 0.58ms

Phát Hiện Chính

  • Hiệu suất: ECDSA nhanh hơn ~12 lần so với RSA (cải thiện 91%).
  • Độ dài URL: URL ngắn hơn 55.1% (RSA: 448 ký tự → ECDSA: 201 ký tự).
  • Độ ổn định: Độ lệch chuẩn thấp hơn cho thấy hiệu suất ổn định hơn.

Ví Dụ URL Thực Tế

URL Ký RSA (448 ký tự):

bash Copy
https://example.com/private-files/uploadtest.jpg?Expires=1757511063&Signature=TNGmM2jrc5GRTalKgYhdZla1uaR~gOiX4HevKDMBbe5JkecwxGe0VoCqXB5KnCPgetRbbBE6JCtOdCYiTwGYxKpByOBJTMaS5Z3H9rqhln~wqQ0KZ-q5-lqvEPsxXlbBXbzJ0MDwNgzcCcu3GavsYGiceFr0veGw5RuYNLSs49HdFUKtdk~7wpI~bjdHzLDSaxoTKtIz0HDgii~VTPP769X~aOmG7~W0hm23nBP4WcTDe6Z8YvDRr61TqjixkNYrh4FiuUFFVuA2Tn0FUuaxcU5qVhtcl0ng8QqoyHUwWFju65h6g0TUM2iueJudQtV-CcoYf-UHlVOGQ39pnG9HxQ__&Key-Pair-Id=ZZZZZZZZZZZZZ

URL Ký ECDSA (201 ký tự):

bash Copy
https://example.com/private-files/uploadtest.jpg?Expires=1757511063&Signature=MEQCIBO~LD6qEaVjiwGFFF233dOB~XJvi7SPhubaN0FjFsigAiBlLZAYz9sCp6aY93bE9z0SuZDhEH3Pw8uL-9rPODVbQw__&Key-Pair-Id=WWWWWWWWWWWWWW

Khi Nào Nên Sử Dụng ECDSA

ECDSA đặc biệt có lợi cho:

  • Tạo URL khối lượng lớn: API tạo nhiều URL ký.
  • Thiết bị di động/IoT: Môi trường hạn chế tài nguyên.
  • Hạn chế chiều dài URL: SMS, mã QR, mạng xã hội.
  • Ứng dụng thời gian thực: Nơi thời gian phản hồi là rất quan trọng.

Kết Luận

Hỗ trợ ECDSA của CloudFront mang lại cải thiện hiệu suất đáng kể và giảm kích thước URL. Đối với các hệ thống tải cao hoặc môi trường hạn chế tài nguyên, ECDSA cung cấp nhiều lợi ích đáng kể trong khi vẫn duy trì cùng mức độ bảo mật như RSA.

Cải thiện 91% hiệu suất và giảm 53% kích thước URL khiến ECDSA trở thành lựa chọn hấp dẫn cho các ứng dụng hiện đại yêu cầu tạo URL ký hiệu quả.

Tài Nguyên

  • Thông báo chính thức của AWS
  • Tài liệu về URL Ký CloudFront
  • Wikipedia về ECDSA

Bạn đã thử các URL ký ECDSA trong thiết lập CloudFront của mình chưa? Hãy chia sẻ trải nghiệm của bạn trong phần bình luận!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào