Saturday, September 7, 2019

[SoC][Design IPsec] Tìm hiểu về về IPsec (IP security).



1.       Sơ lược về IPsec.
Ngày nay, với sự tiến bộ của khoa học kĩ thuật, con người có thể sử dụng internet mọi lúc mọi nơi từ các chiếc smart phone, smart clock, laptop ..v..v. Bắt nguồn từ sự phát triển đó cụm từ IoT (internet of thing) ra đời và được sử dụng rộng rãi trong nhiều lĩnh vực như vi mạch, công nghệ thông tin..v.v.
Đi đôi với sự phát triển của khoa học kĩ thuật là sự phát triển của giới hacker công nghệ. Việc trao đổi thông tin điện tử ngày càng nhiều đòi hỏi việc bảo mật thông tin ngày càng cao. Trên thế giới đã có rất nhiều chuyên gia về bảo mật trở nên nổi tiếng.
Trong bài viết hôm nay, chúng ta sẽ trao đổi về những vấn đề cơ bản liên quan đến thiết kế IPsec (IP security). Những phần tiếp theo chúng ta sẽ đi vào chi tiết hơn. Trong bài này, tôi chỉ trình bài một cách tổng quát nhằm giúp mọi người có cái nhìn ban đầu về nó.
IPSec là một phần của giao thức IPv6 để đảm bảo tính bảo mật của dữ liệu khi truyền qua mạng (nghĩa là xác thực, quyền riêng tư và tính toàn vẹn).

a.       Mục đích của IPsec là gì?
Đó là nhầm tránh việc thông tin bị đánh cắp trong quá trình truyền tải hay nói đúng hơn là mặc dù thông tin có bị đánh cắp đi chăng nữa thì người đánh cắp cũng không hiểu được những gì bạn đang muốn truyền tải đến nơi nhận. Đơn giản vì chúng đã bị mã hoá thành những mã code không mang bất kì ý nghĩa nào.

b.       Vậy IPsec hoạt động như thế nào?
Đầu tiên dữ liệu được mã hoá tại nơi gửi (có thể bằng phần mềm hoặc phần cứng). Sau đó, dữ liệu sẽ trở thành 1 đoạn mã không mang ý nghĩa và được gửi tới slave (nơi nhận) thông qua các cổng giao tiếp hoặc đường truyền mạng. Slave (hay nơi nhận) sẽ nhận dữ liệu và lưu vào bộ nhớ. PC sẽ gửi dữ liệu được lưu trong bộ nhớ tới mạch giải mã. Tại đây dữ liệu sẽ được giải mã  và lưu đè vào vùng địa chỉ của đoạn mã được lưu trước đó. Như vậy quá trình giải mã hoàn tất. Vì sự đa dạng của thiết kế nên mình chỉ trình bài về một thiết kế tổng quát để bạn có cái nhìn ban đầu. Dĩ nhiên nó có thể không đúng trong mọi trường hợp.

c.       Yêu cầu của một thuật toán mã hoá là gì?
Có 4 yêu cầu chính của thuật toán mã hoá đó là:
Dữ liệu ngõ vào thay đổi ít nhưng đoạn mã sau mã hóa phải thay đổi nhiều.
Tôi lấy ví dụ:


Data_in = 00000000000000000000000000000000, Cipher = 4d6532ddd043db3c18032cbc94c010e7
Data_in = 00000000000000000000000000000001, Cipher = 12665e211902afb12eb792fd0b2e3f4c
Data_in = 00000000000000000000000000000002, Cipher = f511b61fe2883cef49847bbbd449c22c

Ví dụ trên tôi đang sử dụng thuật toán ASE dữ liệu ngõ vào là 128 bit,  Key là 128 bit và dữ liệu sau mã hoá là 128 bits. Nếu nhìn vào bạn dễ dàng nhận ra là ở dữ liệu ngõ vào, tôi chỉ đổi 1 bit tại vị trí số 0 từ 0 sang 1 nhưng đoạn mã ngõ ra đã khác rất nhiều.
Dữ liệu vào khác nhau thì các mã ngõ ra cũng phải khác nhau.
Rất dễ thấy rằng nếu dữ liệu vào khác nhau nhưng ngõ ra giống nhau (Cùng key, hoặc key khác nhau nhưng có quy luật giải mã đặc biệt) thì chúng ta không thể giải mã được.

Không nên có mối liên hệ với nhau giữa các mã output.
 Chẵng hạn bạn có ví dụ sau:

Data_in = 00000000000000000000000000000000, Cipher = 4d6532ddd043db3c18032cbc94c010e7
Data_in = 00000000000000000000000000000001, Cipher = 4d6532ddd043db3c18032cbc94c010e8
Data_in = 00000000000000000000000000000002, Cipher = 4d6532ddd043db3c18032cbc94c010e9

Nếu dữ liệu vào tăng 1 đơn vị thì dữ liệu ra cũng tuyến tính tăng 1 đơn vị theo. Điều này là không được phép vì những hacker sẽ dễ dàng phán đoán ra thuật toán của bạn và giải mã chúng một cách dễ dàng.

Các đoạn mã hoá phải có phương pháp để giải mã.
Và tất nhiên là nếu bạn mã hoá một đoạn mã nào đó thì bạn phải có cách để giãi mã chúng nếu bạn không giải mã được đồng nghĩa với việc nó không mang lại bất kì giá trị nào cho các ứng dụng thực tiễn.
Tạo ra một đoạn mã không khó nhưng khó ở chỗ bạn phải cân nhắc xem người khác có dễ dàng giải mã của bạn hay không. Bên cạnh đó bạn có giải mã đúng không.

2.       Đễ mã hoá bạn cần những gì?
Đầu tiên đó là dữ liệu ngõ vào của bạn. Bạn phải xác định được ngõ vào của bạn có độ dài bao nhiệu bit. Vì có 1 số thuật toán chỉ hỗ trợ các độ dài bit nhất định. Nên nếu bạn có dữ liệu vào khác với độ dài dữ liệu ban đầu bạn phải chuyển đổi nó về độ dài dữ liệu phù hợp.
Thứ hai là một đoạn mã gọi là key. Với đoạn mã này bạn không nên tiết lộ ra bên ngoài vì đó là chìa khoá để bạn giải mã.
Thông thường mã key này được dùng cho quá trình mã hoá cũng như giải mã.
Tuy nhiên một số trường hợp, Mã key này sẽ khác cho quá trình mã hoá và giải mã. Tuỳ vào thuật toán bạn dùng cho mã hoá hay giãi mã.

 Như vậy tóm lại thông thường khi cần mã hóa bạn cần xác định:
·         Dữ liệu ngõ vào.
·         Một mã key.

3.       Công cụ.
Trong một số trường hợp bên gửi sẽ mã hoá dữ liệu với phần mềm và bên nhận sẽ giải mã với phần cứng (có thể tiến hành trên FPCA). Điều này là hợp lí vì bên nhận cần xử lí nhanh quá trình nhận dữ liệu và trả về tín hiệu response. Trong khi bên gửi việc delay không ảnh hưởng nhiều đến hiệu suất của quá trình.

Trên đây chỉ là kiến thức bản thân nếu bạn thấy nó không đúng hay còn thiếu sót hãy góp ý cùng mình bằng cách để lại comment bên dưới nhé.


Tác giả: RVC/TrongTran
Ngày: 07/09/2019

Tài liệu tham khảo.

No comments:

Post a Comment

Cách tính BW và latency trong 1 hệ thống SoC sử dụng chuẩn giao tiếp AXI protocol

Tác giả:  TrongTran Ngày:  31/12/2019 Nếu bạn nào đang làm về verification cho system performance (ST) thì bài này sẽ bổ ích cho bạn. Ngày ...