👋 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
# 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
# Đă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
# 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.
- Truy cập tab "Hành vi" của phân phối của bạn.
- Chỉnh sửa hành vi liên quan.
- Đặt "Giới hạn quyền truy cập người xem" thành "Có".
- Đặt "Loại ủy quyền đáng tin cậy" thành "Nhóm khóa đáng tin cậy".
- 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
# 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
# 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
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
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!