Mô hình triển khai hệ thống

Một phần của tài liệu Xử lý và mã hóa bảo mật dữ liệu trên điện toán đám mây (Trang 70)

Hình 3.1 Mô hình hệ thống.

Mô hình triển khai hệ thống thử nghiệm bao gồm 3 máy: Client, Web server và Database server trong đó:

 Máy Client đóng vai trò một máy khách truy cập và sử dụng một ứng dụng web trên Web server. Trên Client có cài một web browser như Firefox chẳng hạn.

 Máy Web server đóng vai trò là một máy chủ web cung cấp một ứng dụng web cho người dùng đồng thời cũng đóng vai trò là một proxy tiếp nhận và xử lý các truy vấn SQL từ ứng dụng web. Trên Web server có cài đặt apache, php để chạy ứng dụng web và CryptDB.

 Máy Database server đóng vai trò là một backend database lưu trữ dữ liệu cho ứng dụng web. Database server này tượng trưng cho backend database được thuê từ các nhà cung cấp dịch vụ đám mây. Trên Database server cài đặt mysql-server.

62

Bảng 3-1 Thông tin các thành phần trong hệ thống

Máy Địa chỉ IP Hệ điều hành Ứng dung cài đặt

Client 192.168.1.4 Windows 7 Ultimate – 64 bit Mozila Firefox 29 Web server 192.168.1.7 Ubuntu Desktop LTS 12.04.4 – 64 bit php5, apache2, CryptDB Database server 192.168.1.8 Ubuntu Server LTS 12.04.4 – 64 bit mysql-server 3.1.2. Mô hình hoạt động hệ thống. Hình 3.2 Lưu đồ hoạt động.

Hoạt động của hệ thống. Nhìn vào lưu đồ hoạt động của hệ thống ta thấy

rõ quá trình hoạt động trải qua 6 bước cụ thể như sau:

 Bước 1: Người dùng tại máy Client mở trình duyệt web truy cập vào ứng dụng được lưu trên máy Web server. Sau đó người dùng gửi các yêu cầu về dữ liệu thông qua việc sử dụng các chức năng của ứng dụng đó.

 Bước 2: Ứng dụng xử lý các yêu cầu chức năng của người dùng, sinh ra các truy vấn tương ứng để truy vấn tới cơ sở dữ liệu thông qua CryptDB.

 Bước 3: CryptDB proxy chặn lại và viết lại các truy vấn đó, điều chỉnh các lớp mã hóa nếu cần thiết sau đó chuyển tiếp các truy vấn được mã hóa tới máy chủ DBMS để thực thi.

63

 Bước 4: máy chủ DBMS thực thi các truy vấn đó và trả về kết quả của truy vấn (được mã hóa) cho CryptDB.

 Bước 5: CryptDB sẽ tiến hành giải mã các kết quả được mã hóa đó thành bản rõ và trả về cho ứng dụng.

 Bước 6: Ứng dụng nhận và hiển thị kết quả dưới dạng bản rõ đáp ứng các yêu cầu của người dùng.

Ứng dụng thử nghiệm. là ứng dụng quản lý nhân viên đơn giản được xây

dựng bằng HTML, CSS, PHP và MySQL gồm có một số chức năng cơ bản như tạo cơ sở dữ liệu, tạo bảng “users” trong cơ sở dữ liệu, thực hiện các thao tác trên bảng đó để quản lý nhân viên như thêm, xem, sửa, xóa, tìm kiếm nhân viên.

Giao diện của ứng dụng thử nghiệm. Bằng cách sử dụng HTML và CSS,

ta có thể dễ dàng tạo được một ứng dụng quản lý nhân viên với giao diện đơn giản như Hình 3.2 trong đó phần header bao gồm các mục thể hiện một số thông tin về ứng dụng, phần sidebar bên tay trái chứa các chức năng của ứng dụng, và phần chính giữa hiển thị nội dung khi ta thực hiện các chức năng đó của ứng dụng.

64

Chức năng của ứng dụng thử nghiệm. Để tạo các chức năng cho ứng

dụng, ngôn ngữ lập trình ta sẽ sử dụng ở đây là PHP. Các chức năng bao gồm tạo cơ sở dữ liệu; tạo hoặc thiết lập lại bảng trong cơ sở dữ liệu; thêm, xem, sửa, xóa, tìm kiếm thông tin nhân viên trong cơ sở dữ liệu.

 Chức năng tạo cơ sở dữ liệu: Để tạo cơ sở dữ liệu sử dụng cho ứng dụng, trước hết ta cần kết nối tới máy chủ cơ sở dữ liệu (ở đây ta sẽ kết nối tới CryptDB qua cổng 3307 với user/password mặc định của CryptDB là „root‟/„letmein‟, thành phần kết nối với máy chủ cơ sở dữ liệu là CryptDB), sau khi kết nối thành công ta sẽ tiến hành chạy câu lệnh “CREATE DATABASE datn;” để tạo một cơ sở dữ liệu mới có tên là “datn”. Đoạn mã PHP sau đây sẽ giúp ta thực hiện được việc này.

$dbc = mysql_connect('127.0.0.1:3307', 'root', 'letmein'); if($dbc) {

//kết nối cơ sở dữ liệu thành công //tạo cơ sở dữ liệu

$r = mysql_query("CREATE DATABASE datn;"); if(!$r) { //câu lệnh bị lỗi

$fail = 1; //cờ lỗi gán bằng 1 die(mysql_error($dbc));

}

//thông báo tạo thành công nếu không có lỗi if($fail != 1) {

echo "<p class='success'>your database has been created succesfully</p>";

} } else {

//kết nối cơ sở dữ liệu không thành công

trigger_error("Could not connect to database: ". mysqli_connect_error());

}

 Chức năng tạo hoặc thiết lập lại bảng “users” trong cơ sở dữ liệu “datn”: Chức năng này sẽ thực hiện kiểm tra trong cơ sở dữ liệu “datn” đã đồn tại bảng “users” chưa. Nếu bảng “users” chưa tồn tại, sẽ tiến hành tạo bảng “users” mới với các trường “user_id”,

65

“name”, “age”, “email”, “user_level”, “salary”. Nếu bảng “users” đã tồn tại, sẽ tiến hành xóa bảng “user” đó đi và tạo một bảng mới. Ở đây các câu lệnh SQL sẽ được lưu trong một tập tin có tên là “database.sql”, ứng dụng sẽ tiến hành đọc nội dung của tập tin này và thực thi từng câu lệnh có trong tập tin để tạo bảng “user”.

//đọc nội dung tập tin

$sql_contents = file_get_contents('database.sql'); $sql_contents = explode(";", $sql_contents);

//thực thi các câu lệnh trong tập tin foreach ($sql_contents as $q) { if(!empty($q)) { $r = mysqli_query($dbc, $q); if(!$r) { $fail = 1; die(mysqli_error($dbc)); } } }

//thông báo thành công nếu không có lỗi if($fail != 1) {

echo "<p class='success'>your database has been setup/reset succesfully</p>";

}

 Chức năng thêm nhân viên: Một form để nhập thông tin của từng nhân viên được tạo ra với các trường tương ứng với các trường trong bảng “users”. Bằng phương thức POST của PHP, giá trị của các trường trong form sẽ được lưu vào các biến cụ thể, các biến này sẽ được sử dụng để thêm thông tin cho một nhân viên vào bảng “users” thông qua lệnh INSERT trong SQL:

$q = "INSERT INTO users (name, age, email, user_level, salary) VALUE ('{$name}', $age, '{$email}', $user_level, $salary)";

//thực thi truy vấn

$r = mysqli_query($dbc, $q) or die(mysqli_error($dbc)); //thông báo thêm thành công hay không

66

$messages = "<p class='success'>The content was added successfully</p>";

} else {

$messages = "<p class='warning'>The content was not added due to a system error</p>";

}

 Chức năng xem nhân viên: Khi thực hiện chức năng này, ứng dụng sẽ truy vấn toàn bộ thông tin của các nhân viên có trong cơ sở dữ liệu thông qua lệnh SELECT và hiển thị ra màn hình. Bên cạnh đó người dùng cũng có thể xem thông tin nhân viên đc sắp xếp thứ tự theo các trường tùy ý nhờ đưa lệnh ORDER BY vào trong truy vấn SQL.

$q = "select user_id, name, age, email, user_level, salary from users ORDER BY {$order_by} ASC";

$r = mysqli_query($dbc, $q) or die("Query {$q} \n<br/> MySQL Error: ".mysqli_error($dbc)); if(mysqli_num_rows($r) > 0) { //hiển thị dữ liệu . . . } else {

echo "<p class='warning'>There is currently no content to display. Please add content first.</p>";

}

 Chức năng sửa/xóa nhân viên: Trong chức năng xem nhân viên, khi hiển thị nhân viên ra màn hình, bên cạnh mỗi nhân viên sẽ có liên kết tới hai chức năng sửa/xóa. Để có thể sửa/xóa đúng nhân viên, ta sẽ thêm một biến „uid‟ vào liên kết tới hai chức năng này, sau đó sự dụng phương thức GET trong PHP để lấy giá trị của biến „uid‟ và cuối cùng tiến hành UPDATE/DELETE nhân viên có user_id tương ứng với „uid‟ đã chọn.

//thêm biến uid cho liên kết tới chức năng sửa/xóa khi hiển thị trong chức năng xem

67 <td><a class='edit' href='edit_content.php?uid={$content['user_id']}'>Edit</a></t d> <td><a class='delete' href='delete_content.php?uid={$content['user_id']}&name={$con tent['name']}'>Delete</a></td> --- //lấy giá trị biến „uid‟ từ liên kết trong chức năng sửa/xóa if(isset($_GET['uid']) && filter_var($_GET['uid'],

FILTER_VALIDATE_INT, array('min_range'=>1))) { $user_id = $_GET['uid'];

}

 Chức năng tìm kiếm nhân viên: Với chức năng này, ta sẽ tạo một form cho người dùng nhập tên nhân viên cần tìm kiếm. Ứng dụng sẽ truy vấn tới cơ sở dữ liệu và SELECT nhân viên có tên ứng với giá trị cần tìm, sau đó hiển thị ra màn hình.

$q = "select user_id, name, age, email, user_level, salary from users where name = '{$search}'";

$r = mysqli_query($dbc, $q) or die("Query {$q} \n<br/> MySQL Error: ".mysqli_error($dbc));

if(mysqli_num_rows($r) > 0) { //hiển thị kết quả tìm được .

. . } else {

echo "<p class='warning'>There is currently no content to display.</p>";

}

Kịch bản thử nghiệm. Với hệ thống được trình bày như trên, kịch bản

thử nghiệm mô hình diễn ra như sau: Đóng vai trò là một người dùng thông thường, ta sẽ sử dụng một trình duyệt web (như Mozila Firefox chẳng hạng) để truy cập tới ứng dụng trên Web server. Sau đó ta sử dụng các chức năng của ứng dụng nhằm truy xuất các dữ liệu cần thiết, ứng dụng thực thi yêu cầu và trả về kết quả cho ta. Đóng vai trò là một người quản trị của Database server, ta sẽ xem xem dữ liệu của người dùng được lưu trữ thế nào trên cơ sở

68

dữ liệu mà ta quả trị. Thử nghiệp thành công nếu kết quả từ Web server trả về cho người dùng bình thường là đọc được còn người quản trị Database server không thể đọc được dữ liệu được lưu trên cơ sở dữ liệu do dữ liệu đã được mã hóa hoàn toàn. Lưu ý với việc các truy vấn phải đi qua CryptDB trước khi tới được Database server nên ta có thể dự đoán được tốc độ đáp ứng yêu cầu của ứng dụng sẽ chậm hơn bình thường.

3.2. Triển khai cài đặt và thử nghiêm

3.2.1. Triển khai cài đặt. Trên máy Web server: Trên máy Web server:

 Tiến hành cập nhật hệ điều hành Ubuntu với hai câu lệnh: ~$ sudo apt-get update

~$ sudo apt-get upgrade

Hình 3.4 Cập nhật Ubuntu.

 Cài đặt các gói phần mềm cần thiết và tiến hành tải CryptDB: ~$ sudo apt-get install git ruby

69

Hình 3.5 Tải CryptDB về máy.

 Tiếp theo ta di chuyển vào thư mục của CryptDB vừa tải về và tiến hành chạy kịch bản cài đặt install.rb:

~$ cd cryptdb

~$ sudo ./scripts/install.rb .

Hình 3.6 Chạy kịch bản cài đặt CryptDB.

 Với các phiên bản cũ của CryptDB, để cài đặt được CryptDB ta phải tiến hành qua rất nhiều bước với nhiều câu lệnh phức tạp và khó nhớ bao gồm cài đặt gần 20 gói phần mềm cần thiết, tiến hành tải CryptDB, compile mysql-proxy, build CryptDB trên MySQL,…

70

Để thuận tiện hơn cho người sử dụng cài đặt phần mềm, tác giả đã viết một kịch bản cài đặt bằng ngôn ngữ ruby. Tất cả những gì chúng ta phải làm là chạy kịch bản cài đặt đó và kịch bản cài đặt này sẽ giúp ta thực hiện tất cả những công việc cần thiết để cài đặt thành công CryptDB.

Hình 3.7 Cài đặt CryptDB thành công.

 Cuối cùng ta tiến hành cài đặt php và apache để hoàn tất việc cài đặt các thành phần cần thiết trên máy Web server:

~$ sudo apt-get install apache2

~$ sudo apt-get install php5 libapache2-mod-php5

Trên máy Database server tương tự ta cũng tiến hành cập nhật như trên máy Web server và cài thêm một thành phần nữa đó là mysql-server:

~$ sudo apt-get update ~$ sudo apt-get upgrade

~$ sudo apt-get install mysql-server 3.2.2. Thử nghiệm mô hình.

Sau khi hoàn tất cài đặt các thành phần trong mô hình thử nghiệm, tiến hành sao chép mã nguồn ứng dụng web vào thư mục /var/ww/ trên máy Web server, sau đó ta chạy CryptDB bằng câu lệnh:

71 ~$ $HOME/cryptdb/bins/proxy-bin/bin/mysql-proxy \ --plugins=proxy \ --event-threads=4 \ --max-open-files=1024 \ --proxy-lua-script=$EDBDIR/mysqlproxy/wrapper.lua \ --proxy-address=127.0.0.1:3307 \ --proxy-backend-addresses=192.168.1.8:3306

Hình 3.8 Chạy proxy trên Web server.

Từ phía Client, ta mở trình duyệt Firefox và truy cập vào ứng dụng web được lưu trên Web server thông qua URL: 192.168.1.7/datn/

72

Hình 3.9 Truy cập ứng dụng web.

Lúc này trên máy Databases server có địa chỉ ip 192.168.1.8 ta đăng nhập vào mysql bằng tài khoản root và xem các cơ sở dữ liệu hiện có.

Hình 3.10 Đăng nhập vào mysql bằng tài khoản root.

Từ máy Client, ta tiến hành tạo ra cơ sở dữ liệu để sử dụng cho ứng dụng web. Sau khi chọn Create và Setup/Reset, ứng dụng web sẽ tiến hành kết nối tới CryptDB tạo ra cơ sở dữ liệu mới là datn và một bảng users trong cơ sở dữ liệu datn. Lúc này trên máy Web server ta sẽ thấy rõ được hoạt động của

73

proxy. Sau khi cơ sở dữ liệu được tạo thành công, trên máy Database server ta sẽ thấy xuất hiện một cơ sở dữ liệu mới là datn cùng một vài cơ sở dữ liệu do CryptDB tạo ra để hỗ trợ các hoạt động truy vấn trên cơ sở dữ liệu đã mã hóa. Trong cơ sở dữ liệu datn trên Database server có một bảng là table_EPDNXMUTKO, bảng này chính là bảng users đã được CryptDB mã hóa và lưu trên Database server với một cấu trúc hoàn toàn khác với cấu trúc của bảng users gốc.

Hình 3.11 Tạo cơ sở dữ liệu trên ứng dụng.

Hình 3.12 Hoạt động của CryptDB khi tạo cơ sở dữ liệu

74

Ta tiến hành tạo ra một vài dữ liệu thông qua chức năng Add Content của ứng dụng web và sử dụng một vài chức năng khác của ứng dụng. Tất cả các truy vấn ứng dụng sinh ra trong quá trình sử dụng đều được CryptDB viết lại, mã hóa trước khi truy vấn tới cơ sở dữ liệu backend, điều này ta hoàn toàn thấy rõ được khi theo dõi hoạt động của proxy trên máy Web server. Còn dữ liệu được lưu trên Database server sẽ được mã hóa hoàn toàn, người quản trị của Database server sẽ không thể đọc được nội dung đã được lưu trữ.

Hình 3.14 Sử dụng một vài chức năng của ứng dụng web.

75

Hình 3.16 Dữ liệu trên Database server được mã hóa hoàn toàn.

3.3. Đánh giá mô hình

3.3.1. Đánh giá về chức năng

Qua quá trình thử nghiệm, ta thấy rõ ràng rằng các chức năng cơ bản đều hoạt động bình thường và không có lỗi gì xảy ra khi thực hiện các truy vấn. CryptDB hỗ trợ hầu hết các truy vấn, do đó ngoài những chức năng cơ bản của ứng dụng thử nghiệm, ta cũng có thể phát triển nhiều chức năng phức tạp hơn nữa cho phù hợp với nhu cầu và điều kiện thực tế của ứng dụng. Tuy nhiên, do vẫn đang trong quá trình phát triển và thử nghiệm, vẫn có một số truy vấn không được CryptDB hỗ trợ như các truy vấn trên các trường nhạy cảm thực hiện các thao tác trên chuỗi (ví dụ chuyển đổi chữ thường) hay thao tác ngày tháng (ví dụ tính toán ngày, tháng, hoặc năm của một giá trị ngày đã đươc mã hóa) chẳng hạn.

Theo một cuộc theo dõi quy mô lớn của sql.mit.edu [2] chỉ ra rằng, trong số 128,840 cột được theo dõi, CryptDB có khả năng hỗ trợ truy vấn trên dữ liệu mã hóa của hầu hết tất cả các cột, chỉ có 1,094 cột là CryptDB không hỗ trợ. Với tỷ lệ hỗ trợ tới hơn 99% như vậy, CryptDB có khả năng đáp ứng gần như hầu hết các truy vấn yêu cầu của những ứng dụng thông thường.

3.3.2. Đánh giá về độ bảo mật dữ liệu

Dữ liệu được lưu trên máy chủ cơ sở dữ liệu hoàn toàn được mã hóa như chúng ta đã thấy trong quá trình thử nghiệm. Nhờ vậy người quản trị cơ sở dữ liệu không thể đọc được dữ liệu được người dùng lưu trữ. Điều chúng ta quan

Một phần của tài liệu Xử lý và mã hóa bảo mật dữ liệu trên điện toán đám mây (Trang 70)

Tải bản đầy đủ (PDF)

(90 trang)