2009-03-14 38 views
20

Tôi đang triển khai một ứng dụng nhỏ trong C, mà tôi muốn bán dưới dạng phần mềm chia sẻ với mức giá hợp lý sau này. Nó sẽ bắt đầu với một thử nghiệm 30 ngày, mà tôi đã khá chắc chắn về cách thực hiện nó.triển khai cho khóa sản phẩm

Vấn đề tôi có, tuy nhiên, là tôi không hoàn toàn chắc chắn cách thực hiện xác minh khóa sản phẩm. Những gì tôi có trong tâm trí là khách hàng có thể đăng ký trên trang web của tôi (sau khi thử sản phẩm một lúc), thanh toán cho sản phẩm và nhận khóa sản phẩm dưới dạng aaaaa-bbbbb-ccccc-ddddd-eeeee qua e -mail (hoặc có thể có sẵn thông qua hồ sơ của mình trên trang web của tôi). Không có vấn đề cho đến nay. Sau đó, anh ta sẽ thả khóa trong các trường khóa thích hợp trong ứng dụng của tôi và bùng nổ ứng dụng được đăng ký.

Từ những gì tôi có thể tập hợp cho đến nay, mọi người đề xuất AES hoặc RSA cho việc này. Thành thật mà nói, tôi theo một hướng khác trong trường đại học (không phải mật mã) và lớp mật mã mà tôi đã học cách đây một thời gian. Nhưng từ những gì tôi nhớ, AES là một thuật toán mã hóa đối xứng, điều đó có nghĩa là tôi chỉ có một chìa khóa để mã hóa và giải mã, đúng không? Làm thế nào tôi có thể sau đó tạo ra hàng ngàn khóa sản phẩm và vẫn xác nhận chúng trong ứng dụng của tôi (mà bằng cách này sẽ không yêu cầu truy cập internet .... vì vậy không kiểm tra lại với một máy chủ)?

Vì vậy, tôi đoán RSA sẽ là con đường để đi? Nhưng RSA không tạo ra các khóa khá dài (ít nhất dài hơn 25 ký tự bắt buộc từ trên)?

Trong another thread Tôi đọc rằng một số sản phẩm thậm chí sẽ không sử dụng mã hóa để tạo/xác minh khóa sản phẩm, mà thay vào đó chỉ cần sử dụng một số kiểm tra như "thêm 2. và ký tự 17. và tổng số đó phải x".

Cách nhanh nhất, dễ nhất và an toàn nhất để đến đây là gì? :-) Mã mẫu sẽ là đường!

Kính trọng,

Sebastian

PS: Oh ... và xin đừng cho tôi biết thế nào chính tôi có thể và sẽ bị nứt tại một số điểm ..... tôi biết về điều đó, mà chủ yếu là lý do tại sao tôi không muốn dành nhiều thời gian với vấn đề này, nhưng đồng thời không làm cho nó quá dễ dàng cho các cracker thường xuyên.

Trả lời

30

Thuật toán đối xứng bị giới hạn, trong đó bất kỳ trình cracker mới nào có trình tách rời có thể tìm thấy khóa của bạn (hoặc thuật toán được sử dụng để tạo) và tạo "keygen".

Vì lý do này, mật mã không đối xứng là con đường để đi. Những tiền đề cơ bản là một cái gì đó như thế này:

  • Khi người dùng mua một giấy phép từ bạn, bạn thu thập một số thông tin chi tiết xác định về người dùng và/hoặc môi trường của họ (thông thường, đây chỉ là một tên đầy đủ, đôi khi một công ty, quá).
  • Bạn tạo một băm MD5 128 bit của thông tin này.
  • Sử dụng mã hóa 1282 bit Elliptic Curve, mã hóa băm này bằng cách sử dụng phím riêng tư trên máy chủ.
  • Văn bản mã hóa 128 bit có thể được biểu diễn cho người dùng dưới dạng chuỗi gồm 25 ký tự bao gồm các chữ cái và chữ số (cộng với dấu gạch ngang tách để dễ đọc). Lưu ý rằng 26 chữ cái + 10 chữ số = 36 giá trị rời rạc, và rằng 36^25> 2^128.
  • Người dùng nhập khóa sản phẩm này vào hộp thoại đăng ký của bạn. Phần mềm máy khách chuyển nó trở lại thành số 128 bit (16 byte), giải mã bằng cách sử dụng khóa công khai của mật mã EC của bạn, và so sánh kết quả với băm MD5 của thông tin cá nhân của người dùng, phải khớp với thông tin được sử dụng để đăng ký .

Đây chỉ là ý tưởng cơ bản, tất nhiên. Để biết thêm chi tiết và mã nguồn, hãy xem Product Keys Based on Elliptic Curve Cryptography.

+0

cảm ơn rất nhiều về các infos. Giả sử rằng tôi không thể sử dụng EEC vì một số lý do .... RSA sẽ không cho vay chính nó cho phương pháp khóa 25 ký tự, bởi vì các khóa RSA có độ dài tối thiểu là 1024 bit, phải không? – Sebastian

+0

RSA * có thể * chỉ có 384 bit nhưng vẫn quá dài đối với khóa do người dùng nhập. Ngay cả khi bạn phân biệt chữ hoa và chữ thường (với 62 ký tự kín đáo), bạn phải có một khóa 65 độ dài. Và RSA ở mức 384 bit là * rất * yếu, vì vậy khóa riêng tư của bạn có thể sẽ bị xâm phạm. –

+1

Tôi thấy việc triển khai ECC miễn phí tại đây: http://www.codeproject.com/KB/security/Elliptic_Curves.aspx. Tôi đã không kiểm tra để xem nó tốt như thế nào. Một chút đào chắc chắn sẽ biến những người khác. Đây là một thứ khá rẻ: http://ellipter.com/. –

1

Cuộc sống đơn giản hơn nếu bạn chỉ cần mua một giải pháp.

http://www.kagi.com/kagisolutions/index.php

Kagi cho phép bạn thu thập các khoản thanh toán và chúng giúp bạn quản lý khóa.

+0

không, xin lỗi, không phải tùy chọn. Giá ước tính của ứng dụng là 4,99 € và phí của Kagi cao đối với một sản phẩm trong phạm vi giá đó. – Sebastian

+1

Phần hài hước nhất là Kagi không còn tồn tại nữa. – dimiguel

0

Vâng, RSA và AES là hai việc rất khác nhau:

  • RSA là mật mã hóa khóa công khai, liên quan đến một khóa công khai và khóa bí mật, và khá chậm. Việc sử dụng chính là thiết lập một trao đổi an toàn của một khóa phiên mã hóa đối xứng.
  • AES là mã hóa đối xứng, nhanh và an toàn.

Vì ứng dụng của bạn không giao tiếp trên các kênh công cộng và việc sử dụng mật mã bị giới hạn đối với kích hoạt/đăng ký sản phẩm bạn sẽ muốn sử dụng mật mã đối xứng.Những lợi ích của mật mã khóa công khai là trong quản lý khóa, mà bạn sẽ được xử lý trên trang web của bạn hoặc thông qua email.

Lưu ý rằng bạn không phải phân phối cùng một khóa cho mọi khách hàng. Bạn có thể tạo ra một băm của một số thông tin đăng ký và XOR nó với một cái gì đó khác (một khóa phiên cố định, có lẽ). Gửi cho khách hàng và chương trình có thể tạo cùng một mã băm và XOR sẽ là khóa bạn đã gửi để tạo khóa cố định ban đầu.

Xử lý mật mã không phải là điều cần làm nhẹ. Như bạn đề cập, bạn mong đợi điều này sẽ bị bẻ khóa. Nếu bạn đang làm của riêng bạn điều này gần như chắc chắn sẽ xảy ra. Bạn vẫn có thể sử dụng triển khai của riêng bạn để "giữ cho những người trung thực thành thật", nhưng nhận ra điều đó là xa như bạn sẽ nhận được. Nếu bạn cần một cái gì đó mạnh mẽ hơn thì bạn nên mua một giải pháp sau khi nghiên cứu kỹ lưỡng về các giải pháp.

0

Bạn có thể xem bài viết Code Project này. Nó mô tả việc thực hiện một khóa phần mềm dựa trên địa chỉ MAC của máy nơi phần mềm được thực hiện. Phương pháp này không lý tưởng, như bản thân auteur thừa nhận, và nó hơi khác một chút so với những gì bạn đang tìm kiếm, nhưng có lẽ nó có thể giúp bạn.

Các vấn đề liên quan