Trao đổi với tôi

http://www.buidao.com
Showing posts with label [Crypto]. Show all posts
Showing posts with label [Crypto]. Show all posts

7/4/10

[Crypto] Decode archive Yahoo Mesenger

Reflink: http://virusvn.com/forum/showthread.php?p=14847#post14847
Poster: DungCoi

Cái này hồi tháng trước mình có hứa sẽ viết.
Nhưng giờ mình vẫn còn bận đủ thứ nên viết thật lẹ để khỏi bị nói là thất hứa. Cũng khá đơn giản nên mình trình bày vắn tắt.

Archive Yahoo Mesenger : Là chức năng lưu trữ các tin nhắn của YM khi người dùng chat để sau đó người dùng có thể mở ra mà đọc lại

Nơi lưu trữ :
Theo mình tìm hiểu trên máy mình thì YM 10 lưu trữ trên 2 nơi :
Các đường dẫn lưu log :
Quote:
C:\ProgramData\Yahoo!\Messenger\Profiles\Nick người dùng: Ít, thiếu
C:\Users\NguyenDung\AppData\Local\VirtualStore\Program Files\Yahoo!\Messenger\Profiles : Lưu trữ đầy đủ
NguyenDung : User trên máy người dùng

Ở máy bạn, nếu bạn muốn xác định chúng thì mẹo nhanh nhất là search các tên file trong hệ thống bằng string : Nick của bạn

Đặc điểm :
Các logchat lưu theo từng ngày kèm theo tên người dùng mà bạn chat
Ví dụ :
Quote:
C:\Users\NguyenDung\AppData\Local\VirtualStore\Pro gram Files\Yahoo!\Messenger\Profiles\dungcoivb\Archive\ Messages\chanh_levankhtn\20100327-dungcoivb.dat
Mã hóa bằng thuật toán xor

Cấu trúc file log :
Mỗi file log sẽ gồm nhiều cấu trúc xếp lần lượt với nhau tạo thành :



Ở đây :
Date : Thời gian tin nhắn truyền đi hay nhận được (Tính theo giờ phút giây)
Chưa rõ : 4 byte này không rõ là gì, không quan tâm luôn
From : Gồm 2 giá trị
0 : Nội dung bạn gửi
1 : Nội dung đứa còn lại gửi


Len : Độ dài phần nội dung
Nội dung : Lấy theo độ dài từ Len
4 byte NULL để kết thúc từng struct

Cách thức giải mã :
1. Đọc lấy ra từng khối dữ liệu như struct trên
2. Do dữ liệu chỉ bị mã hóa ở Nội dung, nên chúng ta chỉ cần tìm cách giải mã nó

Các bạn có thể xem đoạn code sau :
Quote:
Private Function decodeArchive(ByVal strUserName As String, ByVal strBody As String) As String
Dim lCount As Long
Dim strRet As String

Dim lCountUser As Long
lCountUser = 1

strRet = ""
For lCount = 1 To Len(strBody)
strRet = strRet & Chr(Asc(Mid(strBody, lCount, 1)) Xor Asc(Mid(strUserName, lCountUser, 1)))

lCountUser = lCountUser + 1
If lCountUser > Len(strUserName) Then
lCountUser = 1
End If
Next
decodeArchive = strRet
End Function
Mình sẽ giải thích như sau :
Cho chuỗi strBody là phần Nội dung
strRet là chuỗi kết quả giải mã (Nội dung ban đầu)
(Cho vị trí của mảng bắt đầu từ vị trí 1)
Cho chuỗi strUserName là nick của bạn

strRet[1] = strBody[1] Xor strUserName[1]
strRet[2] = strBody[2] Xor strUserName[2
strRet[3] = strBody[3] Xor strUserName[3]
strRet[4] = strBody[4] Xor strUserName[4]
strRet[n] = strBody[n] Xor strUserName[5][m]

Bạn chú ý, giá trị cần Xor chỉ đếm tới bằng độ dài User Name (Ở đây là Len(strUserName))
Sau đó sẽ trở lại giá trị 1, rồi cứ thế lại đếm lên

Ví dụ : strUserName = "dung"
strRet[1] = strBody[1] Xor strUserName[1]
strRet[2] = strBody[2] Xor strUserName[2]
strRet[3] = strBody[3] Xor strUserName[3]
strRet[4] = strBody[4] Xor strUserName[4]
strRet[5] = strBody[5] Xor strUserName[1]
strRet[6] = strBody[6] Xor strUserName[2]
strRet[7] = strBody[7] Xor strUserName[3]
strRet[8] = strBody[8] Xor strUserName[4]
...

Nếu trình bày : strRet[n] = strBody[n] Xor strUserName[m]
ở đây cũng có thể thi gọn đơn giản bằng công thức :
m = n mod (Len(strUserName) +1)

Hay
strRet[n] = strBody[n] Xor strUserName[n mod (Len(strUserName) +1)]


Mình có đính kèm bên dưới là source (Trên VB6) mình viết để minh họa, mình viết bằng VB6 nên không hiển thị Unicode được, các bạn thông cảm
Bạn lưu ý chỉnh lại mà dùng cho thích hợp



Tham khảo :
http://rongchaua.net/security-mainme...archive-decode

File được đính kèm
Kiểu file:  zip Yahoo Archive.zip‎ (6,0 KB, 1 xem)

6/23/10

[Crypto] Recovering Internet Explorer passwords: theory and practice

Introduction
Types of passwords stored in Internet Explorer
Internet Credentials
AutoComplete data
AutoComplete passwords
FTP passwords
Synchronization passwords
Identities passwords
AutoForms data
Content Advisor password
Brief overview of Internet Explorer password recovery programs
PIEPR - the first acquaintance
Three real-life examples
Recovering current user's FTP passwords
Recovering website passwords from unloadable operating system
Recovering uncommonly stored passwords
Conclusion

Introduction

Nobody will likely dispute the fact that Internet Explorer is today's most popular Web browser. According to the statistics, approximately 70% of online users prefer to use just this program. Arguments about its pros and cons may last forever; still, this browser is the leader of its industry, and this is a fact that requires no proof. Internet Explorer carries several built-in technologies, designed to make average user's life easier. One of them - IntelliSense - is made for taking care of the routine tasks, like the automatic completion of visited webpage addresses, automatic filling of form fields, users' passwords, etc.

Many of today's websites require registration, which means, user would have to enter user name and password. If you use more than a dozen of such websites, you will likely need a password manager. All modern browsers have a built-in password manager in their arsenal, and Internet Explorer is not an odd. Indeed, why would one have to remember yet another password if it is going to be forgotten some time soon anyway? Much easier would be to have browser do the routine work of remembering and storing passwords for you. It's convenient and comfortable.

This would be a totally perfect solution; however, if your Windows operating system crashed or reinstalled not the way it's supposed to be reinstalled, you can easily lose the entire list of your precious passwords. That's the toll for the comfort and convenience. It's good just about every website has a saving 'I forgot password' button. However, this button will not always take your headache from you.

Each software developer solves the forgotten password recovery problem their own way. Some of them officially recommend copying a couple of important files to another folder, while other send all registered users a special utility that allows managing the migration of private data, and the third ones pretend they are not seeing the problem. Nevertheless, the demand creates the offer, and password recovery programs are currently on a great demand.

In this article, let's try to classify types of private data stored in Internet Explorer, look at programs for the recovery of the data, and study real-life examples of recovering lost Internet passwords.

Types of passwords stored in Internet Explorer

Internet Explorer may store the following types of passwords:

  • Internet Credentials
  • AutoComplete Data
  • AutoComplete Passwords
  • FTP Passwords
  • Synchronization Passwords for cached websites
  • Identities Passwords
  • AutoForms Data
  • Content Advisor Password

Let's take a closer look at each listed item.

Internet Credentials for websites

Internet credentials mean user's logins and passwords required for accessing certain websites, which are processed by the wininet.dll library. For example, when you try to enter the protected area of a website, you may see the following user name and password prompt (Figure 1).

Web site passwords
Figure 1. Internet Credentials dialog.


If the option 'Remember my password' is selected in that prompt, the user credentials will be saved to your local computer. The older versions of Windows 9х stored that data in user's PWL file; Windows 2000 and newer store it in the Protected Storage.

AutoComplete Data

AutoComplete data (passwords will be covered further) are also stored in the Protected Storage and appear as lists of HTML form field names and the corresponding user data. For example, if an HTML page contains an e-mail address entry dialog: once user has entered his e-mail address, the Protected Storage will have the HTML field name, the address value, and the time the record was last accessed.

The HTML page title and website address are not stored. Is that good or bad? It's difficult to determine; more likely to be good than bad. Here are the obvious pros: it saves free space and speeds up browser's performance. If you think the last note is insignificant, try to imagine how you would have to perform several extra checkups in a multi-thousand (this is not as rare as it may seem to be) auto-fill list.

Another obvious plus is that data for identical by name (and often by subject) HTML form fields will be stored in the same place, and the common data will be used for the automatic filling of such pages. We will see this by this example. If one HTML page contains an auto-fill field with the name 'email', and user entered his e-mail address in that field, IE will put in the storage, roughly, 'email=my@email.com'. From now on, if the user opens another website, which has a page with the same field name 'email', the user will be suggested to auto-fill it with the value that he entered on the first page (my@email.com). Thus, the browser somewhat discovers AI capabilities within itself.

The major drawback of this data storage method comes out of its advantage that we just described. Imagine, user has entered auto-fill data on a webpage. If someone knows the HTML form field name, that person can create his own simplest HTML page with the same field name and open it from a local disk. To uncover the data entered in this field, such person will not even have to connect to the Internet and open the original WWW address.

AutoComplete Passwords

In the case with passwords data, however, as you might have guessed, the data will not be filled in automatically. Since auto-complete passwords are stored along with the Web page name, and each password is bound to only one specific HTML page.

In the new version, Internet Explorer 7, both AutoComplete passwords and data are encrypted completely different; the new encryption method is free from the shortcoming just described (if that can be classified as a shortcoming.)

It is worth noticing that Internet Explorer allows users to manage auto-fill parameters manually, (Figure 2) through the options menu.

Internet Explorer AutoComplete  settings
Figure 2. Internet Explorer AutoComplete settings.

FTP passwords

FTP site passwords are stored pretty much the same way. It would be relevant to notice that beginning with Windows XP FTP passwords are additionally encrypted with DPAPI. This encryption method uses logon password. Naturally, this makes it much more difficult to recover such lost passwords manually, since now one would need to have the user's Master Key, SID and the account password.

Synchronization Passwords for cached websites

Synchronization passwords free user from having to enter passwords for cached websites (sites set to be available offline.) Passwords of this type are also stored in IE's Protected Storage.

Identities passwords

So are identities passwords. The identity-based access management mechanism is not widespread in Microsoft's products, except, perhaps, Outlook Express.

AutoForms Data

A special paragraph must cover the form auto-fill method, which constitutes a hybrid way of storing data. This method stores the actual data in the Protected Storage, and the URL, which the data belong to, is stored in user's registry. The URL written in the registry is stored not as plaintext - it is stored as hash. Here is the algorithm for reading form auto-fill data in IE 4 - 6:

//Get autoform password by given URL
BOOL CAutoformDecrypter::LoadPasswords(LPCTSTR cszUrl, CStringArray *saPasswords)
{
assert(cszUrl && saPasswords);

saPasswords->RemoveAll();

//Check if autoform passwords are present in registry
if ( EntryPresent(cszUrl) )
{
//Read PStore autoform passwords
return PStoreReadAutoformPasswords(cszUrl,saPasswords);
}

return FALSE;
}


//Check if autoform passwords are present
BOOL CAutoformDecrypter::EntryPresent(LPCTSTR cszUrl)
{
assert(cszUrl);

DWORD dwRet, dwValue, dwSize=sizeof(dwValue);
LPCTSTR cszHash=GetHash(cszUrl);

//problems computing the hash
if ( !cszHash )
return FALSE;

//Check the registry
dwRet=SHGetValue(HKCU,_T("Software\Microsoft\Internet Explorer\IntelliForms\SPW"), cszHash, NULL, &dwValue, &dwSize);
delete((LPTSTR)cszHash);

if ( dwRet==ERROR_SUCCESS )
return TRUE;

m_dwLastError=E_NOTFOUND;
return FALSE;
}


//retrieve hash by given URL text and translate it into hex format
LPCTSTR CAutoformDecrypter::GetHash(LPCTSTR cszUrl)
{
assert(cszUrl);

BYTE buf[0x10];
LPTSTR pRet=NULL;
int i;

if ( HashData(cszUrl,buf,sizeof(buf)) )
{
//Allocate some space
pRet=new TCHAR [sizeof(buf) * sizeof(TCHAR) + sizeof(TCHAR)];
if ( pRet)
{
for ( i=0; i<sizeof(buf); i++ )
{
// Translate it into human readable format
pRet[i]=(TCHAR) ((buf[i] & 0x3F) + 0x20);
}
pRet[i]=_T('');
}
else
m_dwLastError=E_OUTOFMEMORY;
}

return pRet;
}


//DoHash wrapper
BOOL CAutoformDecrypter::HashData(LPCTSTR cszData, LPBYTE pBuf,
DWORD dwBufSize)
{
assert(cszData && pBuf);

if ( !cszData || !pBuf )
{
m_dwLastError=E_ARG;
return FALSE;
}

DoHash((LPBYTE)cszData,strlen(cszData),pBuf,dwBufSize);
return TRUE;
}


void CAutoformDecrypter::DoHash(LPBYTE pData, DWORD dwDataSize,
LPBYTE pHash, DWORD dwHashSize)
{
DWORD dw=dwHashSize, dw2;

//pre-init loop
while ( dw-->0 )
pHash[dw]=(BYTE)dw;

//actual hashing stuff
while ( dwDataSize-->0 )
{
for ( dw=dwHashSize; dw-->0; )
{
//m_pPermTable = permutation table
pHash[dw]=m_pPermTable[pHash[dw]^pData[dwDataSize]];
}
}
}

The next, seventh generation of the browser, is most likely going to make this user's data storage mechanism its primary data storage method, declining the good old Protected Storage. Better to say, auto-fill data and passwords, from now on, are going to be stored here.

What is so special and interesting in this mechanism that made MS decide to use it as primary? Well, first of all, it was the encryption idea, which isn't new at all but still simple and genius, to disgrace. The idea is to quit storing encryption keys and generate them whenever that would be necessary. The raw material for such keys would be HTML page's Web address.

Let's see how this idea works in action. Here is IE7's simplified algorithm for saving auto-fill data and password fields:

  1. Save Web page's address. We will use this address as the encryption key (EncryptionKey).
  2. Obtain Record Key. RecordKey = SHA(EncryptionKey).
  3. Calculate checksum for RecordKey to ensure the integrity of the record key (the integrity of the actual data will be guaranteed by DPAPI.) RecordKeyCrc = CRC(RecordKey).
  4. Encrypt data (passwords) with the encryption key EncryptedData = DPAPI_Encrypt(Data, EncryptionKey).
  5. Save RecordKeyCrc + RecordKey + EncryptedData in the registry.
  6. Discard EncryptionKey.


It is very, very difficult to recover password without having the original Web page address. The decryption looks pretty much trivial:

  1. When the original Web page is open, we take its address (EncryptionKey) and obtain the record key RecordKey = SHA(EncryptionKey).
  2. Browse through the list of all record keys trying to locate the RecordKey.
  3. If the RecordKey is found, decrypt data stored along with this key using the EncryptionKey. Data = DPAPI_Decrypt(EncryptedData, EncryptionKey).

In spite of the seeming simplicity, this Web password encryption algorithm is one of today's strongest. However, it has a major drawback (or advantage, depending which way you look at it.) If you change or forget the original Web page address, it will be impossible to recover password for it.

Content Advisor password

And the last item on our list is Content Advisor password. Content Advisor was originally developed as a tool for restricting access to certain websites. However, for some reason it was unloved by many users (surely, you may disagree with this.) If you once turned Content Advisor on, entered a password and then forgot it, you will not be able to access the majority of websites on the Internet. Fortunately (or unfortunately), this can be easily fixed.

The actual Content Advisor password is not stored as plaintext. Instead, the system calculates its MD5 hash and stores it in Windows registry. On an attempt to access the restricted area, the password entered by user is also hashed, and the obtained hash is compared with the one stored in the registry. Take a look at PIEPR source code checking Content Advisor password:

void CContentAdvisorDlg::CheckPassword()
{
CRegistry registry;

//read the registry
registry.SetKey(HKLM, "SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Ratings");

BYTE pKey[MD5_DIGESTSIZE], pCheck[MD5_DIGESTSIZE];
if ( !registry.GetBinaryData("Key",pKey,MD5_DIGESTSIZE) )
{
MessageBox(MB_ERR,"Can't read the password.");
return;
}

//Get one set by user
CString cs;
m_wndEditPassword.GetWindowText(cs);
MD5Init();
MD5Update((LPBYTE)(LPCTSTR)cs,cs.GetLength()+1);
MD5Final(pCheck);

//Check hashes
if ( memcmp(pKey,pCheck,MD5_DIGESTSIZE)==0 )
MessageBox(MB_OK,"The password is correct!");
else
MessageBox(MB_OK,"Wrong password.");
}

The first thing you may think about is to try to pick the password by using the brute force or dictionary attack. However, there is a more elegant way to that. You can simply remove the hash from the registry. That's it; so simple... Well, it's better to rename it instead, so that if you ever need it, you can restore it back. Some programs also let users check CA password, "drag out" password hint, toggle password on/off, etc.

Brief Overview of Internet Explorer Password Recovery Programs

It's worth noticing that not all password recovery programs suspect there are so many ways to recover passwords. Most likely, this is related to the fact that some passwords (e.g., synchronization passwords) are not often used in the real life, and FTP passwords are not so simple to be 'dragged out'. Here is a brief overview of the most popular commercial products for recovering passwords for the most popular browser on earth :)

Advanced Internet Explorer Password Recovery from the not unknown company, ElcomSoft - does not recognize AutoForm passwords and encrypted FTP passwords. Not to be excluded, the last version of the program may have learnt to do that. Simple, convenient user interface. The program can be upgraded online automatically.

Internet Explorer Key from PassWare - similarly, does not recognize certain types of passwords. Sometimes the program halts with a critical error when reading some uncommon types of IE's URLs. Displays first two characters of passwords being recovered. The advantages worth noticing are the Spartan user interface and operating convenience.

Internet Explorer Password from Thegrideon Software - not bad, but can recover just three types of Internet Explorer passwords (this is enough for the majority of cases.) Deals with FTP passwords properly. Version 1.1 has problems recovering AutoForm passwords. Has convenient user interface, which in some way reminds one from AIEPR. One can be totally overwhelmed with the beauty and helpfulness of the company's website.

Internet Password Recovery Toolbox from Rixler Software - offers some greater functionality than the previously covered competitors. It can recover encrypted FTP passwords and delete selected resources. However, it has some programming errors. For example, some types of IE records cannot be deleted. The program comes with a great, detailed help file.

ABF Password Recovery from ABF software - quite a good program with friendly user interface. The list of IE record types supported by the program is not long. Nevertheless, it deals with all of them properly. The program can be classified as a multi-functional one, since it can restore passwords for other programs also.

The major drawback of all programs named here is the capability to recover passwords only for user currently logged on.

As it was said above, the general body of stored Internet Explorer resources is kept in a special storage called Protected Storage. Protected Storage was developed specially for storing personal data. Therefore the functions for working with it (called PS API) are not documented. Protected Storage was first introduced with the release of the version 4 of Internet Explorer, which, by the way, unlike the third version, was written from scratch.

So, until very recent time, all programs for recovering Internet Explorer passwords used those undocumented API. That's the reason why one significant restriction was applied to the recovery work: PS API can only work with passwords for user that is currently logged on. When the system encrypts data stored in Protected Storage, besides everything else it uses user's SID, without which it is literally impossible (taking into account the current level of computers' calculating performance) to recover stored passwords.

Protected Storage uses a very well thought through data encryption method, which uses master keys and strong algorithms, such as des, sha, and shahmac. Similar data encryption methods are now used in the majority of modern browsers; e.g. in Opera or FireFox. Microsoft, meanwhile, quietly but surely develops and tests new ones. When this article is written, in the pre-Beta version of Internet Explorer 7 Protected Storage was only used for storing FTP passwords.

The analysis of this preliminary version suggests that Microsoft is preparing another 'surprise' in the form of new, interesting encryption algorithms. It is not known for sure, but most likely the new company's data protection technology InfoCard will be involved in the encryption of private data.

Thus, with a great deal of confidence one can assert that with the release of Windows Vista and the 7th version of Internet Explorer passwords will be stored and encrypted with fundamentally new algorithms, and the Protected Storage interface, to all appearances, will become open for third-party developers.

It is somewhat sad, for we think the true potential of Protected Storage was still not uncovered. And this is why we think so:

  • First, Protected Storage is based on module structure, which allows plugging other storage providers to it. However, for the last 10 years while Protected Storage exists, not a single new storage provider was created. System Protected Storage is the only storage provider in the operating system, which is used by default.

  • Second, Protected Storage has its own, built-in access management system, which, for some reason, is not used in Internet Explorer or in other MS products.
  • Third, it is not very clear why MS have decided to decline Protected Storage in storing AutoComplete data and passwords. Decline it as a tried and true data storage, and not data encryption mechanism. It would be more logically proven to keep Protected Storage at least for storing data when implementing a new encryption algorithm. Without fail, there were weighty reasons for that. Therefore, it would be interesting to hear the opinion of MS specialists concerning this subject matter.

PIEPR - the First Acquaintance

Passcape Internet Explorer Password Recovery was developed specifically to bypass the PS API's restriction and make it possible to recover passwords directly, from the registry's binary files. Besides, it has a number of additional features for advanced users.

The program's wizard allows you to choose one of several operating modes:

Automatic
Current user's passwords will be recovered by accessing the closed PS API interface. All current user's passwords currently stored in Internet Explorer will be recovered with a single click of the mouse.

Manual
Passwords will be recovered without PS API. This method's main advantage is the capability to recover passwords from your old Windows account. For that purpose, you will need to enter path to the user's registry file. Registry files are normally not available for reading; however, the technology used in PIEPR allows doing that (provided you have the local administrative rights.)

User's registry file name is ntuser.dat; its resides in the user's profile, which is normally %SYSTEMDRIVE%:\Documents and Settings\%USERNAME%, where %SYSTEMDRIVE% stands for the system disk with the operating system, and %USERNAME% is normally account name. For instance, path to registry file may look like this: C:\Documents and Settings\Johnnt\user.dat

If you have ever been a happy owner of Windows 9x/ME, after you upgrade your operating system to Windows NT, Protected Storage will providently save a copy of your old private data. As a result of that, Protected Storage may contain several user identifiers, so PIEPR will ask you to select the right one before it gets to the decryption of the data (Figure 3).

Protected Storage user  selection
Figure 3. Selecting Protected Storage owner.


One of the listed SIDs will contain data left by the old Windows 9x/ME. That data is additionally encrypted with user's logon password, and PIEPR currently does not support the decryption of such data.

If ntuser.dat contains encrypted passwords (e.g., FTP sites passwords), the program will need additional information in order to decrypt them (Figure 4):

  • Logon password of user whose data are to be decrypted
  • Full path to the user's MasterKey
  • User's SID

DPAPI decryption
Figure 4. DPAPI decryption dialog for FTP passwords.

Normally, the program finds the last two items in user's profile and fills that data automatically. However, if ntuser.dat was copied from another operating system, you will have to take care of that on your own. The easiest way to get the job done is to copy the entire folder with user's Master Key (there may be several of them) to the folder with ntuser.dat. Master Key resides in the following folder on your local computer: %SYSTEMDRIVE%:\Documents and Settings\%USERNAME%\Application Data\Microsoft\Protect\%UserSid%, where %SYSTEMDRIVE% stands for the system disk with the operating system, %USERNAME% - account name, %UserSid% - user's SID. For example, path to the folder with a master key may look as follows: C:\Documents and Settings\John\Application Data\Microsoft\Protect\S-1-5-21-1587165142-6173081522-185545743-1003. Let's make it clear that it is recommended to copy the entire folder S-1-5-21-1587165142-6173081522-185545743-1003, for it may contain several Master Keys. Then PIEPR will select the right key automatically.

Windows marks some folders as hidden or system, so they are invisible in Windows Explorer. To make them visible, enable showing hidden and system objects in the view settings or use an alternative file manager.

Once the folder with user's Master Key was copied to the folder with ntuser.dat, PIEPR will automatically find the required data, so you will only have to enter user's password for recovering FTP passwords.

Content Advisor
CA passwords, as it was said already, is not kept as plain text; instead, it is stored as hash. In the CA password management dialog, it is enough to just delete (you can restore the deleted password at any time later) or change this hash to unlock sites locked with CA. PIEPR will also display your password hint if there is one.

Asterisks passwords
PIEPR's fourth operating mode, which allows recovering Internet Explorer passwords hidden behind asterisks. To recover such password, simply drag the magnifier to the window with a **** password. This tool allows recovering passwords for other programs that use IE Frames as well; e.g., Windows Explorer, some IE-based browsers, etc.

We have reviewed the basic Internet Explorer password recovery modes. There is also a number of additional features for viewing and editing cookies, cache, visited pages history, etc. We are not going to cover them in detail; instead, we are going to look at a few password recovery examples done with PIEPR.

Three Real-Life Examples.
Example 1: Recovering current user's FTP password

When opening an FTP site, Internet Explorer pops up the log on dialog (Figure 5).

FTP password dialog
Figure 5. FTP logon dialog.

If you have opened this site and set the 'Save password' option in the authentication dialog, the password must be saved in Protected Storage, so recovering it is a pretty trivial job. Select the automatic operating mode in PIEPR and then click 'Next'. Locate our resource in the dialog with decrypted passwords that appears (the site name must appear in the Resource Name column.)

As we see, the decryption of current user's password should not cause any special difficulties. Oh, if the password is not found for some reason - don't forget to check IE's Auto-Complete Settings (Figure 2). Possibly, you have simply not set the program to save passwords.

Three Real-Life Examples.
Example 2: We will need to recover Web site passwords. The operating system is unbootable.

This is a typical, but not fatal situation. The necessity to recover Internet Explorer passwords after unsuccessful Windows reinstallation occurs just as often.

In either case, we will have user's old profile with all files within it. This set is normally enough to get the job done. In the case with the reinstallation, Windows providently saves the old profile under a different name. For example, if your account name was John, after renaming it may look like John.WORK-72C39A18.

The first and the foremost what you must do is to gain access to files in the old profile. There are two ways to doing this:

  1. Install a new operating system on a different hard drive; e.g., Windows XP, and hook the old hard drive to it.

  2. Create a Windows NT boot disk. There are many different utilities for creating boot disks and USB flash disks available online. For instance, you can use WinPE or BartPE. Or just use our Passcape ISO Burner. If your old profile was stored on an NTFS part of your hard drive, the boot disk will have to support NTFS.

Let's take the first route. Once we gain access to the old profile, we will need to let the system show hidden and system files. Otherwise, the files we need will be invisible. Open Control Panel, then click on Folder Options, and then select the View tab. On this tab, find the option 'Show hidden files and folders' and select it. Clear the option 'Hide protected operating system files'. When the necessary passwords are recovered, it's better to reset these options to the way they were set before.

Open the program's wizard in the manual mode and enter path to the old profile's registry file. In our case, that is C:\Documents And Settings\John.WORK-72C39A18\ntuser.dat. Where John.WORK-72C39A18 is the old account name. Click 'Next'.

This data should normally be sufficient for recovering Internet Explorer passwords. However, if there is at least a single encrypted FTP password, the program will request additional data, without which it will not be able to recover such types of passwords (Figure 4):

  • User's password
  • User's Master Key
  • User's SID.

Normally, the program finds the last two items in user's profile and fills that data automatically. However, if that didn't happen, you can do that by hand: copy ntuser.dat and the folder with the Master Key to a separate folder. It is important to copy the entire folder, for it may contain several keys, and the program will select the right one automatically. Then enter path to file ntuser.dat that you have copied to another folder.

That's it. Now we need to enter the old account password, and the recovery will be completed. If you don't care for FTP password, you can skip the user's password, Master Key, and SID entry dialog.

Three Real-Life Examples.
Example 3: Recovering uncommonly stored passwords.

When we sometimes open a website in the browser, the authentication dialog appears. However, PIEPR fails to recover it in either automatic or manual mode. The 'Save password' option in Internet Explorer is enabled. We will need to recover this password.

Indeed, some websites don't let browser to save passwords in the auto-complete passwords list. Often, such websites are written in JAVA or they use alternative password storage methods; e.g., they store passwords in cookies.

If the password field is filled with asterisks, the solution is clear: select the ASTERISKS PASSWORDS operating mode and then open the magic magnifier dialog. Then simply drag the magnifier to the Internet Explorer window (Figure 6).

Asterisks passwords revealer
Figure 6. The password is behind the asterisks.

The password (passwords, if the Internet Explorer window has several fields with asterisks) is to appear in the PIEPR window (Figure 7).

Internet Explorer asterisks  passwords
Figure 7. Magnifying glass in use.

But it's not always that simple. The password field may be empty or that field may indeed contain *****. In this case, as you have guessed by now, the ASTERISKS PASSWORDS tool will be useless.

We can suppose, the password is stored in cookies. Let's try to locate it. Choose the IE Cookie Explorer tool (Figure 8).

IE Cookie Explorer
Figure 8. IE Cookie Explorer.

The dialog that appears will list the websites that store cookies on your computer. Click on the URL column header to order the websites list alphabetically. This will help us find the right website easier. Go through the list of websites and select the one we need. The list below will display the decrypted cookies for this website (Figure 9).

Decrypted cookies
Figure 9. Decrypted cookies.

As the figure shows, in our case the login and password are not encrypted and are stored as plain text.

Cookies are often encrypted. In this case, you are not likely to succeed recovering the password. The only thing you can try doing in order to recover the old account is to create a new account. Then you will be able to copy the old cookies in a text editor and replace them with the new ones. However, this is only good when the worst comes to the worst; it is not recommended to use it normally.

Don't forget also that just about all pages and forms with passwords have the 'Forgot password' button.

Conclusion

As this article shows, recovering Internet Explorer passwords is a pretty simple job, which does not require any special knowledge or skills. However, despite of the seeming simplicity, password encryption schemes and algorithms are very well thought through and just as well implemented. Although the Protected Storage concept is over 10 years of age, don't forget that it has proven the very best recommendations of the experts and has been implemented through three generations of this popular browser.

With the release of the next, 7th version of IE, Microsoft is preparing fundamentally new schemes for protecting our private data, where it uses improved encryption algorithms and eliminates shortages peculiar to Protected Storage.

In particular, the analysis of the preliminary beta versions of Internet Explorer 7 has revealed that autoform password encryption keys are no longer stored along with data. They are not stored, period! This is a little know-how, which is to be estimated at its true worth by both professionals and end users, who, finally, will benefits of it anyway.

But the main thing is, the release of the new concept will eliminate the major drawback peculiar to Protected Storage, which is the possibility to recover passwords without knowing the additional information. Better to say, was enough for a potential hacker to gain physical access to the contents of a hard drive, in order to steal or damage passwords and user's other private data. With the release of Internet Explorer 7, the situation will somewhat change.

Meanwhile, we will only have to wait impatiently for the advent of Windows Vista and IE 7 to take a closer look at new encryption mechanisms used in the next generation of this popular browser.

This document may be freely distributed or reproduced provided that the
reference to the original article is placed on each copy of this document.
(c) 2006 Passcape Software. All rights reserved.



*1 Human's memory can be split into two categories: short-term memory and long-term memory. For the purposes of memorizing information, human beings activate short-term memory, which is characterized by limited volume. When the volume is overloaded, new information that enters the memory, partially pushes the old information out, which permanently disappears. To store information in the short-term memory, one needs to keep constant attention to material being memorized for the entire period while the material is to be in the memory. If one doesn't repeat the information stored in the memory for a certain period of time (e.g., a new password), that information can permanently or fragmentarily fall out of the conscience sphere and never end up in the long-term memory.

*2 USERNAME.PWL (where USERNAME is your logon name) is a PassWord List file. It records passwords to resources on the network and uses them to reconnect to those resources so you don't have to type the password again.

*3 Protected Storage provides applications with an interface to store user data that must be kept secure or free from modification. Units of data stored are called Items. The structure and content of the stored data is opaque to the Protected Storage system. Access to Items is subject to confirmation according to a user-defined Security Style, which specifies what confirmation is required to access the data, such as whether a password is required. In addition, access to Items is subject to an Access rule set. There is an Access rule for each Access Mode: for example, read/write. Access rule sets are composed of Access Clauses. Typically at application setup time, a mechanism is provided to allow a new application to request from the user access to Items that may have been created previously by another application.
Items are uniquely identified by the combination of a Key, Type, Subtype, and Name. The Key is a constant that specifies whether the Item is global to this computer or associated only with this user. The Name is a string, generally chosen by the user. Type and Subtype are GUIDs, generally specified by the application. Additional information about Types and Subtypes is kept in the system registry and include attributes such as Display Name and UI hints. For Subtypes, the parent Type is fixed and included in the system registry as an attribute. The Type group Items is used for a common purpose: for example, Payment or Identification. The Subtype group Items share a common data format.
We'll try to cover the Protected Storage structure in one of the upcoming articles.

*4 Starting with Microsoft Windows 2000, the operating system began to provide a Data Protection Application-Programming Interface (DPAPI) API. This is simply a pair of function calls that provide OS-level data protection services to user and system processes. By OS-level, we mean a service that is provided by the operating system itself and does not require any additional libraries. By data protection, we mean a service that provides confidentiality of data through encryption. Since the data protection is part of the OS, every application can now secure data without needing any specific cryptographic code other than the necessary function calls to DPAPI. These calls are two simple functions with various options to modify DPAPI behavior. Overall, DPAPI is a very easy-to-use service that will benefit developers that must provide protection for sensitive application data, such as passwords and private keys.
DPAPI is a password-based data protection service: it requires a password to provide protection. The drawback, of course, is that all protection provided by DPAPI rests on the password provided. This is offset by DPAPI using proven cryptographic routines, specifically the strong Triple-DES and AES algorithms, and strong keys, which we'll cover in more detail later. Since DPAPI is focused on providing protection for users and requires a password to provide this protection, it logically uses the user's logon password for protection.
DPAPI is not responsible for storing the confidential information it protects. It is only responsible for encrypting and decrypting data for programs that call it, such as Windows Credential manager, the Private Key storage mechanism, or any third-party programs.
Please refer to microsoft.com for more information.

*5 A Master Key is key data material from which other encryption/decryption keys are derived.

*6 SID - Security IDentifier

*7 A cookie is a small bit of text that accompanies requests and pages as they go between the Web server and browser. The cookie contains information the Web application can read whenever the user visits the site. Cookies provide a useful means in Web applications to store user-specific information. For example, when a user visits your site, you can use cookies to store user preferences or other information. When the user visits your Web site another time, the application can retrieve the information it stored earlier.
Cookies are used for all sorts of purposes, all relating to helping the Web site remember you. In essence, cookies help Web sites store information about visitors. A cookie also acts as a kind of calling card, presenting pertinent identification that helps an application know how to proceed.
But often cookies criticized for weak security and inaccurate user identification.
Please refer to microsoft.com to read more.


reflink: http://www.passcape.com/internet_explorer_passwords

6/7/10

[Crypto] Tìm hiểu về khoa học giấu thông tin Cryptography



Bài viết hy vọng có thể giúp ích cho những ai mong muốn tìm hiểu lĩnh vực nghiên cứu về việc giấu thông tin và tìm hiểu một số phương pháp tấn công hệ thống thông tin mã hóa.


Cryptography, được dịch là "mật mã học", là một ngành có nhiều thuật ngữ có thể làm cho nhiều người "ngơ ngác": như "hash function", "one-time pad" hay Rijndael... Bài viết này giải thích các khái niệm thường dùng trong ngành mật mã học, hy vọng có thể giúp ích cho những ai mong muốn tìm hiểu về lĩnh vực này.

Cryptography (hay crypto) - mật mã học – ngành khoa học nghiên cứu về việc giấu thông tin. Cụ thể hơn, mật mã học là ngành học nghiên cứu về những cách chuyển đổi thông tin từ dạng "có thể hiểu được" thành dạng "không thể hiểu được" và ngược lại. Cryptography giúp đảm bảo những tính chất sau cho thông tin:

• Tính bí mật (confidentiality): thông tin chỉ được tiết lộ cho những ai được phép.

• Tính toàn vẹn (integrity): thông tin không thể bị thay đổi mà không bị phát hiện.

• Tính xác thực (authentication): người gửi (hoặc người nhận) có thể chứng minh đúng họ.

• Tính không chối bỏ (non-repudiation): người gửi hoặc nhận sau này không thể chối bỏ việc đã gửi hoặc nhận thông tin.

Mật mã có rất nhiều ứng dụng trong thực tế như bảo vệ giao dịch tài chính (rút tiền ngân hàng, mua bán qua mạng), bảo vệ bí mật cá nhân... Nếu kẻ tấn công đã vượt qua tường lửa và các hệ thống bảo vệ khác thì mật mã chính là hàng phòng thủ cuối cùng cho dữ liệu của bạn.

Cần phân biệt khái niệm cryptography với khái niệm steganography (tạm dịch là giấu thông tin). Điểm khác nhau căn bản nhất giữa hai khái niệm này là: cryptography là việc giấu nội dung của thông tin, trong khi steganography là việc giấu sự tồn tại của thông tin đó.


Sơ đồ mã hóa vã giải mã một thông điệp

Cryptosystem (viết tắt của cryptographic system): hệ thống mã hóa thông tin, có thể là phần mềm như PGP, Ax-Crypt, Truecrypt... giao thức như SSL, IPsec... hay đơn giản là một thuật toán như DES.

Encrypt (encipher): mã hóa – quá trình biến đổi thông tin từ dạng ban đầu - có thể hiểu được thành dạng không thể hiểu được, với mục đích giữ bí mật thông tin đó.

Decrypt (decipher): giải mã – quá trình ngược lại với mã hóa, khôi phục lại thông tin ban đầu từ thông tin đã được mã hóa.

Plaintext (cleartext): dữ liệu gốc (chưa được mã hóa).

Ciphertext: dữ liệu đã được mã hóa.

Lưu ý: từ text (hay message) ở đây được dùng theo quy ước, được hiểu là tất cả những dữ liệu được mã hóa (hay giải mã) chứ không chỉ là văn bản chữ như nghĩa thông thường. Khi dịch ra tiếng Việt, từ "văn bản" và từ "thông điệp" cũng tuân theo quy ước tương tự.

Cipher (hay cypher): thuật toán dùng để thực hiện quá trình mã hóa hay giải mã. Trong khuôn khổ bài viết này gọi tắt là thuật toán.

Key: chìa khóa – thông tin dùng cho qui trình mã hóa và giải mã.

(Xem "Sơ đồ mã hóa và giải mã một thông điệp")

Code: cần phân biệt code trong mật mã học với code trong lập trình hay code trong Zip code... Trong cryptography, code (mã) có ý nghĩa gần như là cipher (thuật toán). Chúng chỉ khác nhau ở chỗ: code biến đổi thông tin ở tầng nghĩa (từ, cụm từ) còn cipher biến đổi thông tin ở tầng thấp hơn, ví dụ chữ cái (hoặc cụm chữ cái) đối với các thuật toán cổ điển hay từng bit (hoặc nhóm bit) đối với các thuật toán hiện đại.

Cryptanalysis: nếu coi mật mã học là việc cất dữ liệu của bạn vào một cái hộp sau đó dùng chìa khóa khóa lại, thì cryptanalysis là ngành nghiên cứu những phương pháp mở hộp để xem dữ liệu khi không có chìa khóa.

KHÁI NIỆM VỀ CHÌA KHÓA

Password: mật khẩu, là một hay nhiều từ mà người dùng phải biết để được cấp quyền truy cập.

Trong thực tế, mật khẩu do người dùng tạo ra thường không đủ độ an toàn để được dùng trực tiếp trong thuật toán. Vì vậy, trong bất cứ hệ thống mã hóa dữ liệu nghiêm túc nào cũng phải có bước chuyển đổi mật khẩu ban đầu thành chìa khóa có độ an toàn thích hợp. Bước tạo chìa khóa này thường được gọi là key derivation, key stretching hay key initialization.

Key Derivation Function: là một hàm hash (sẽ giải thích rõ hơn ở phần sau) được thiết kế sao cho chìa an toàn hơn đối với tấn công kiểu brute-force hay cổ điển. Hàm này được thực hiện lại nhiều lần trên mật khẩu ban đầu cùng với một số ngẫu nhiên để tạo ra một chìa khóa có độ an toàn cao hơn. Số ngẫu nhiên này gọi là salt, còn số lần lặp lại là iteration.

Ví dụ một mật khẩu là "pandoras B0x", cùng với salt là "230391827", đi qua hàm hash SHA-1 1000 lần cho kết quả là một chìa khóa có độ dài 160 bit như sau: 3BD454A72E0E7CD6959DE0580E3C19F51601C359 (thể hiện dưới dạng số thập lục phân).

Keylength (Keysize): Độ dài (hay độ lớn) của chìa khóa. Nói một chìa khóa có độ dài 128 bit có nghĩa chìa đó là một số nhị phân có độ dài 128 chữ số. Một thuật toán có chìa khóa càng dài thì càng có nhiều khả năng chống lại tấn công kiểu brute-force.

THUẬT TOÁN MÃ HÓA

Cổ điển

• Substitution: thay thế – phương pháp mã hóa trong đó từng kí tự (hoặc từng nhóm kí tự) của văn bản ban đầu được thay thế bằng một (hay một nhóm) kí tự khác. Tuy không còn được sử dụng nhưng ý tưởng của phương pháp này vẫn được tiếp tục trong những thuật toán hiện đại.

• Transposition: hoán vị – phương pháp mã hóa trong đó các kí tự trong văn bản ban đầu chỉ thay đổi vị trí cho nhau còn bản thân các kí tự không hề bị biến đổi.

Hiện đại

• Symmetric cryptography: mã hóa đối xứng, tức là cả hai quá trình mã hóa và giải mã đều dùng một chìa khóa. Để đảm bảo tính an toàn, chìa khóa này phải được giữ bí mật. Vì thế các thuật toán loại này còn có tên gọi khác là secret key cryptography (hay private key cryptography), tức là thuật toán mã hóa dùng chìa khóa riêng (hay bí mật). Các thuật toán loại này lý tưởng cho mục đích mã hóa dữ liệu của cá nhân hay tổ chức đơn lẻ nhưng bộc lộ hạn chế khi thông tin đó phải được chia sẻ với một bên thứ hai.

Giả sử nếu Alice chỉ gửi thông điệp đã mã hóa cho Bob mà không hề báo trước về thuật toán sử dụng, Bob sẽ chẳng hiểu Alice muốn nói gì. Vì thế bắt buộc Alice phải thông báo cho Bob về chìa khóa và thuật toán sử dụng tại một thời điểm nào đó trước đấy. Alice có thể làm điều này một cách trực tiếp (mặt đối mặt) hay gián tiếp (gửi qua email, tin nhắn...). Điều này dẫn tới khả năng bị người thứ ba xem trộm chìa khóa và có thể giải mã được thông điệp Alice mã hóa gửi cho Bob.

Mã hóa đối xứng có thể phân thành hai nhóm phụ:

- Block ciphers: thuật toán khối – trong đó từng khối dữ liệu trong văn bản ban đầu được thay thế bằng một khối dữ liệu khác có cùng độ dài. Độ dài mỗi khối gọi là block size, thường được tính bằng đơn vị bit. Ví dụ thuật toán 3-Way có kích thước khối bằng 96 bit.

- Stream ciphers: thuật toán dòng – trong đó dữ liệu đầu vào được mã hóa từng bit một. Các thuật toán dòng có tốc độ nhanh hơn các thuật toán khối, được dùng khi khối lượng dữ liệu cần mã hóa chưa được biết trước, ví dụ trong kết nối không dây. Có thể coi thuật toán dòng là thuật toán khối với kích thước mỗi khối là 1 bit.

• Asymmetric cryptography: mã hóa bất đối xứng, sử dụng một cặp chìa khóa có liên quan với nhau về mặt toán học, một chìa công khai dùng để mã hoá (public key) và một chìa bí mật dùng để giải mã (private key). Một thông điệp sau khi được mã hóa bởi chìa công khai sẽ chỉ có thể được giải mã với chìa bí mật tương ứng. Do các thuật toán loại này sử dụng một chìa khóa công khai (không bí mật) nên còn có tên gọi khác là public-key cryptography (thuật toán mã hóa dùng chìa khóa công khai).

Quay lại với Alice và Bob, nếu Alice muốn gửi một thông điệp bí mật tới Bob, cô ta sẽ tìm chìa công khai của Bob. Sau khi kiểm tra chắc chắn chìa khóa đó chính là của Bob chứ không của ai khác (thông qua chứng chỉ điện tử – digital certificate), Alice dùng nó để mã hóa thông điệp của mình và gửi tới Bob. Khi Bob nhận được bức thông điệp đã mã hóa anh ta sẽ dùng chìa bí mật của mình để giải mã nó. Nếu giải mã thành công thì bức thông điệp đó đúng là dành cho Bob. Alice và Bob trong trường hợp này có thể là hai người chưa từng quen biết. Một hệ thống như vậy cho phép hai người thực hiện được giao dịch trong khi không chia sẻ trước một thông tin bí mật nào cả.

Một trong những hạn chế của các thuật toán mã hóa bất đối xứng là tốc độ chậm, do đó trong thực tế người ta thường sử dụng một hệ thống lai tạp trong đó dữ liệu được mã hóa bởi một thuật toán đối xứng, chỉ có chìa dùng để thực hiện việc mã hóa này mới được mã hóa bằng thuật toán bất đối xứng.

MỘT SỐ PHƯƠNG PHÁP TẤN CÔNG HỆ THỐNG THÔNG TIN MÃ HÓA

Bất cứ ai cũng có thể tạo ra một hệ thống thông tin mã hóa cho riêng mình. Nhưng để có một hệ thống an toàn và hiệu quả đòi hỏi người thiết kế phải có kiến thức toán học sâu sắc, có kinh nghiệm về bảo mật và am hiểu các phương pháp tấn công.
• Brute-force attack (exhaustive key search): phương pháp tấn công bằng cách thử tất cả những chìa khóa có thể có. Đây là phương pháp tấn công thô sơ nhất và cũng khó khăn nhất.
Theo lý thuyết, tất cả các thuật toán hiện đại đều có thể bị đánh bại bởi brute-force nhưng trong thực tiễn việc này chỉ có thể thực hiện được trong thời gian hàng triệu, thậm chí hàng tỉ năm. Vì thế có thể coi một thuật toán là an toàn nếu như không còn cách nào khác để tấn công nó dễ hơn là brute-force.
Ví dụ: Thuật toán DES có độ dài chìa khóa là 56 bit tức là có tổng cộng tất cả 256 chìa để dùng. Nếu ai đó muốn "bẻ khoá” DES bằng cách thử hàng loạt chìa (brute-force attack) thì sẽ phải thử đến 256 lần (khoảng hơn 70 triệu tỉ lần).
• Frequency analysis: thống kê tần suất, chỉ có thể áp dụng được đối với các thuật toán cổ điển dùng phương pháp thay thế, ví dụ phương pháp Caesar. Để thực hiện phương pháp này ta cần một lượng văn bản đã mã hóa đủ lớn để phép thống kê được chính xác. Ngoài ra còn phải biết ngôn ngữ sử dụng trong văn bản ban đầu, nếu văn bản ban đầu là tiếng Anh thì nhiều khả năng kí tự xuất hiện nhiều nhất trong văn bản đã mã hóa là do chữ e mã hóa thành, kí tự nhiều thứ nhì bắt nguồn từ chữ a...
• Differential cryptanalysis: Eli Biham và Adi Shamir tìm ra phương pháp này vào khoảng cuối những năm 1980; nó thường được sử dụng để tấn công các thuật toán khối (block cipher - sẽ nói rõ hơn ở phần sau). Phương pháp này dựa trên việc phân tích những biến đổi của hai văn bản gốc có liên quan khi được mã hóa bởi cùng một chìa.
Còn rất nhiều phương pháp khác như Mod-n cryptanalysis, Linear cryptanalysis, Birthday attack, Algebraic attack... mà bất cứ ai thiết kế hệ thống mã hóa cũng phải chú ý tới.

Một số thuật toán nổi tiếng

• One-time Pad (OTP): xuất hiện từ đầu thế kỉ 20 và còn có tên gọi khác là Vernam Cipher, OTP được mệnh danh là cái chén thánh của ngành mã hóa dữ liệu. OTP là thuật toán duy nhất chứng minh được về lý thuyết là không thể phá được ngay cả với tài nguyên vô tận (tức là có thể chống lại kiểu tấn công brute-force). Để có thể đạt được mức độ bảo mật của OTP, tất cả những điều kiện sau phải được thỏa mãn:

- Độ dài của chìa khóa phải đúng bằng độ dài văn bản cần mã hóa.

- Chìa khóa chỉ được dùng một lần.

- Chìa khóa phải là một số ngẫu nhiên thực.

Mới nghe qua có vẻ đơn giản nhưng trong thực tế những điều kiện này khó có thể thỏa mãn được. Giả sử Alice muốn mã hóa chỉ 10MB dữ liệu bằng OTP, cô ta phải cần một chìa khóa có độ dài 10MB. Để tạo ra một số ngẫu nhiên lớn như vậy Alice cần một bộ tạo số ngẫu nhiên thực (TRNG - True Random Number Generator). Các thiết bị này sử dụng nguồn ngẫu nhiên vật lý như sự phân rã hạt nhân hay bức xạ nền vũ trụ. Hơn nữa việc lưu trữ, chuyển giao và bảo vệ một chìa khóa như vậy cũng hết sức khó khăn.

Dễ dàng hơn, Alice cũng có thể dùng một bộ tạo số ngẫu nhiên ảo (PRNG - Pseudo Random Number Generator) nhưng khi đó mức độ bảo mật giảm xuống gần bằng zero hay cùng lắm chỉ tương đương với một thuật toán dòng như RC4 mà thôi.

Do có những khó khăn như vậy nên việc sử dụng OTP trong thực tế là không khả thi.

• DES: viết tắt của Data Encryption Standard. DES là một thuật toán khối với kích thước khối 64 bit và kích thước chìa 56 bit. Tiền thân của nó là Lucifer, một thuật toán do IBM phát triển. Cuối năm 1976, DES được chọn làm chuẩn mã hóa dữ liệu của nước Mỹ, sau đó được sử dụng rộng rãi trên toàn thế giới. DES cùng với mã hóa bất đối xứng đã mở ra một thời kì mới cho ngành mã hóa thông tin. Trước DES, việc nghiên cứu và sử dụng mã hóa dữ liệu chỉ giới hạn trong chính phủ và quân đội. Từ khi có DES, các sản phẩm sử dụng nó tràn ngập thị trường. Đồng thời, việc nghiên cứu mã hóa thông tin cũng không còn là bí mật nữa mà đã trở thành một ngành khoa học máy tính bình thường.

Trong khoảng 20 năm sau đó, DES đã trải qua nhiều khảo sát, phân tích kỹ lưỡng và được công nhận là an toàn đối với các dạng tấn công (tất nhiên, ngoại trừ brute-force).

Tới tháng 7 năm 1998, EFF (Electronic Frontier Foundation) đã "brute-force" thành công DES trong 56 giờ. Ít lâu sau đó cùng với mạng tính toán ngang hàng Distribute.net, tổ chức này đã lập nên kỉ lục mới là 22 giờ 15 phút. Sự kiện này chứng tỏ cỡ chìa 56 bit của DES đã lỗi thời và cần được thay thế.

• AES: viết tắt của Advance Encryption Standard. Tháng 12 năm 1997, viện tiêu chuẩn và công nghệ Mỹ (NIST – National Institute of Standard and Technology) kêu gọi phát triển một thuật toán mới thay thế cho 3DES (một biến thể an toàn hơn của DES với chìa khóa dài 112 bit). Thuật toán được chọn phải là thuật toán khối có kích thước khối là 128 bit, hỗ trợ chìa khóa có kích thước 128 bit, 192 bit và 256 bit.

15 thuật toán được gửi đến từ nhiều nơi trên thế giới, 5 thuật toán lọt vào vòng hai: Rijndael, Twofish, Serpent, RC6 và MARS. Tháng 11 năm 2001, Rijndael đuợc chọn làm AES (một phần nhờ có tốc độ nhanh hơn so với các đối thủ), chính thức thay thế DES trong vai trò chuẩn mã hóa dữ liệu.

• RSA: là một thuật toán mã hóa bất đối xứng được sử dụng rất rộng rãi trong giao dịch điện tử. Cái tên RSA có nguồn gốc từ ba chữ cái đầu của tên ba người đồng thiết kế ra nó: Ronald Rivest, Adi Shamir và Leonard Adleman.

Ngoài ra còn nhiều thuật toán khác nhưng do khuôn khổ bài viết có hạn nên không thể đi sâu, mà chỉ liệt kê một số thuật toán thông dụng:

Các thuật toán đối xứng:

• Thuật toán dòng: RC4, A5/1, A5/2, Chameleon...

• Thuật toán khối: 3DES, RC5, RC6, 3-Way, CAST, Camelia, Blowfish, MARS, Serpent, Twofish, GOST...

Các thuật toán bất đối xứng: Elliptic Curve, ElGamal, Diffie Hellman...

HÀM HASH

Hàm hash (hash function) là hàm một chiều mà nếu đưa một lượng dữ liệu bất kì qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra.
Ví dụ, từ "Illuminatus" đi qua hàm SHA-1 cho kết quả E783A3AE2ACDD7DBA5E1FA0269CBC58D.
Ta chỉ cần đổi "Illuminatus" thành "Illuminati" (chuyển "us" thành "i") kết quả sẽ trở nên hoàn toàn khác (nhưng vẫn có độ dài cố định là 160 bit) A766F44DDEA5CACC3323CE3E7D73AE82.

Hai tính chất quan trọng của hàm này là:
• Tính một chiều: không thể suy ra dữ liệu ban đầu từ kết quả, điều này tương tự như việc bạn không thể chỉ dựa vào một dấu vân tay lạ mà suy ra ai là chủ của nó được.
• Tính duy nhất: xác suất để có một vụ va chạm (hash collision), tức là hai thông điệp khác nhau có cùng một kết quả hash, là cực kì nhỏ.

Một số ứng dụng của hàm hash:
• Chống và phát hiện xâm nhập: chương trình chống xâm nhập so sánh giá trị hash của một file với giá trị trước đó để kiểm tra xem file đó có bị ai đó thay đổi hay không.
• Bảo vệ tính toàn vẹn của thông điệp được gửi qua mạng bằng cách kiểm tra giá trị hash của thông điệp trước và sau khi gửi nhằm phát hiện những thay đổi cho dù là nhỏ nhất.
• Tạo chìa khóa từ mật khẩu.
• Tạo chữ kí điện tử.
SHA-1 và MD5 là hai hàm hash thông dụng nhất và được sử dụng trong rất nhiều hệ thống bảo mật. Vào tháng 8 năm 2004, tại hội nghị Crypto 2004, người ta đã tìm thấy va chạm đối với MD5 và SHA-0, một phiên bản yếu hơn của hàm hash SHA-1. Không bao lâu sau đó, vào khoảng giữa tháng 2 năm 2005, một nhóm ba nhà mật mã học người Trung Quốc đã phát hiện ra một phương pháp có thể tìm thấy va chạm đối với SHA-1 chỉ trong vòng 269 bước tính toán (tức là có thể nhanh hơn brute-force vài nghìn lần).
Người dùng bình thường cũng không cần phải hoảng sợ trước những phát hiện này bởi vì ít nhất phải một vài năm nữa người ta mới có khả năng mang những kết quả đó vào trong thực tế. Tuy vậy, các chuyên gia vẫn khuyên nên bắt đầu chuyển sang các hàm hash an toàn hơn như SHA-256, SHA-384 hay SHA-512.


Theo VnExperts

5/29/10

[Crypto] Giải thuật RSA

Giải thuật RSA
Author: RongChauA

www.reaonline.net
1 Giới thiệu.____________________________________________________________________2
2 Phân phối khóa._____________________________________________________________4
3 Phương pháp truyền dữ liệu „lai“._________________________________________5
4 Giải thuật RSA._______________________________________________________________5
4.1 Giải thuật._______________________________________________________________________5
4.1.1 Hàm một chiều._____________________________________________________________________5
4.1.2 Public Key.__________________________________________________________________________5
4.1.3 Private Key._________________________________________________________________________5
4.1.4 Ví dụ với sự giúp đỡ của RSA Tool :__________________________________________________5
4.2 Mã hóa tin tức.__________________________________________________________________7
4.2.1 Công thức.__________________________________________________________________________7
4.2.2 Ví dụ với mã nguồn C#._____________________________________________________________7
4.3 Giải mã tin tức._________________________________________________________________7
4.3.1 Công thức___________________________________________________________________________7
5 Ví dụ._________________________________________________________________________8
5.1 Chuẩn bị.________________________________________________________________________8
5.2 Tạo khóa._______________________________________________________________________8
5.3 Mã hóa.__________________________________________________________________________9
5.4 Giải mã._________________________________________________________________________9
5.5 Kết luận._______________________________________________________________________10
5.6 Độ phức tạp của giải thuật RSA.______________________________________________10
6 Chữ ký kỹ thuật số__________________________________________________________11
7 Ứng dụng.___________________________________________________________________12
8 Tài liệu tham khảo._________________________________________________________12

download: http://megashare.vn/dl.php/1227340

[Crypto] Thuật toán số hóa thông điệp MD5


Thời gian gởi : 30-04-2004

Bài viết này cung cấp thông tin cho cộng đồng Internet. Nó không xác định một chuẩn Internet. Sự phát hành của bài viết này là không giới hạn...

Vị trí của bài viết này

Bài viết này cung cấp thông tin cho cộng đồng Internet. Nó không xác định một chuẩn Internet. Sự phát hành của bài viết này là không giới hạn

Lời cảm ơn

Chúng tôi muốn cám ơn Don Coppersmith, Burt Kaliski, Ralph Merkle, David Chaum, và Noam Nisan vì rất nhiều đề xuất và góp ý có ích

Nội dung

1. Mục đích

2. Thuật ngữ và ký hiệu

3. Mô tả thuật toán MD5

4. Tổng kết

5. Sự khác nhau giữa MD4 và MD5

Tài liệu tham khảo

Phụ lục A - Mã nguồn tham khảo

Xem xét về tính bảo mật

Liên hệ với tác giả

1. Mục đích

Tài liệu này mô tả thuật toán số hóa thông điệp MD5. Thuật toán nhận vào 1 thông điệp độ dài tùy ý và tạo ra một số 128 bit, là một dạng ``vân tay`` hay ``mã số thông điệp`` ( message digest ) của đầu vào. Người ta cho rằng sẽ không khả thi về mặt tính toán để tạo ra 2 thông điệp có cùng mã số thông điệp, hoặc tạo ra một thông điệp với mã số cho trước.Thuật toán MD5 được dự tính áp dụng cho những ứng dụng chữ ký điện tử, ở đó một file lớn phải được ``nén`` một cách an toàn trước khi mã hóa với một khóa cá nhân ( private key ) dưới một hệ mã hóa công khai như RSA

Thuật toán MD5 được thiết kế để chạy tương đối nhanh trên các máy 32 bit, có thể được thực hiện một cách khá gọn.

Thuật toán MD5 là sự mở rộng của thuật toán MD4. MD5 chậm hơn một chút so với MD4 nhưng an toàn hơn. MD5 được thiết kế vì người ta cảm thấy có thể MD4 đã được chấp nhận trong sử dụng quá nhanh so với sự đánh giá nó. MD4 được thiết kế để chạy rất nhanh, nó đã ``nằm trên ranh giới`` theo cách nói về nguy cơ của sự thành công trong việc phá mã. MD5 đã lùi lại một chút, từ bỏ một chút tốc độ cho sự bảo mật. Nó kết hợp một số ý kiến góp ý của các chuyên gia, thuật toán MD5 hiện đang được đánh giá và có thể được chấp nhận như một chuẩn.

2. Thuật ngữ và ký hiệu

Trong tài liệu này một ``word`` là một lượng 32 bit và một ``byte`` là một lượng 8 bit. Một dãy các bit có thể được xem như một dãy các byte, trong đó mỗi nhóm 8 bit liên tiếp được xem như một byte với bit cao của mỗi byte đặt trước. Tương tự, mỗi dãy các byte có thể xem như một dãy các word 32 bit, trong đõ mỗi nhóm 4 byte liên tiếp được xem như một word với byte thấp đặt trước.

Ký hiệu x_i nghĩa là phần tử x thứ i (``x sub i``). Nếu số thứ tự đó là một biểu thức ta viết nó trong ngoặc nhọn, ví dụ như x_{i+1} ; ^ ký hiệu cho số mũ.
Ký hiệu ``+`` cho phép cộng các word, nghĩa là cộng theo môđun 2^32.
X <<< s ký hiệu giá trị 32 bit nhận được bằng cách dịch chuyển các bit của X (theo kiểu quay vòng ) sang trái s vị trí.
not(X) ký hiệu phép đối lập (NOT) các bit
X v Y ký hiệu phép OR các bit
X xor Y ký hiệu phép XOR các bit
XY ký hiệu phép AND các bit

3. Mô tả thuật toán MD5

Giả sử chúng ta có thông điệp b bit ở đầu vào, và ta muốn tìm mã số của thông điệp. Ở đây b là số không âm bất kỳ; b có thể bằng 0 và không cần chia hết cho 8, độ lớn có thể bất kỳ. Tưởng tượng rằng các bit của thông điệp được viết như sau :
m_0 m_1 m_2 ... m_{b-1}

Mã số thông điệp được tính qua 5 bước sau

3.1 - Bước 1 : Các bit gắn thêm

Thông điệp được mở rộng, thêm bit vào phía sau sao cho độ dài của nó ( tính theo bit ) đồng dư với 448 theo môđun 512. Nghĩa là thông điệp được mở rộng sao cho nó còn thiếu 64 bit nữa thì sẽ có một độ dài chia hết cho 512. Việc này luông được thực hiện ngay cả khi bản thân độ dài thông điệp đã đồng dư với 448 theo môđun 512.
Việc thêm bit này thực hiện như sau : một bit ``1`` được thêm vào sau thông điệp, sau đó các bit ``0`` được thêm vào để có một độ dài đồng dư với 448 môđun 512. Trong tất cả các trường hợp, có ít nhất 1 và nhiều nhất 512 bit được thêm vào.

3.2 - Bước 2 : Gắn thêm độ dài

Dạng biểu diễn 64 bit độ dài b của chuỗi ban đầu được thêm vào phía sau kết quả của bước 1. Trong trường hợp b lớn hơn 2^64 thì chỉ có 64 bit thấp của b được sử dụng. ( Các bit này được thêm vào phía sau dưới dạng 2 word 32 bit, gắn word thấp trước theo quy ước ở trên )
3.3 - Bước 3 : Khởi tạo bộ đệm MD
Một bộ đệm 4 word (A,B,C,D) được dùng để tính mã số thông điệp. Ở đây mỗi A,B,C,D là một thanh ghi 32 bit. Những thanh ghi này được khởi tạo theo những giá trị hex sau ( các byte thấp trước ) :
word A : 01 23 45 67
word B : 89 ab cd ef
word C : fe dc ba 98
word D : 76 54 32 10

3.4 - Bước 4 : Xử lý thông điệp theo từng khối 16 word

Trước hết ta định nghĩa các hàm phụ, các hàm này nhận đầu vào là 3 word 32 bit và tạo ra một word 32 bit.
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z)= XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))

Với mỗi bit, F hoạt động như một điều kiện : nếu X thì Y nếu không thì Z. Hàm F có thể định nghĩa bằng phép + thay vì v bởi vì XY và not(X)Z không bao giờ có ``1`` ở cùng 1 vị trí bit.Các hàm G,H và I tương tự như F, ở chỗ chúng tác động theo từng bit tương ứng để tạo ra kết quả từ các bit của X,Y và Z

Bước này sử dụng một bảng 64 giá trị T[1 .. 64] được tạo ra từ hàm sin. Gọi T[i] là phần tử thứ i của bảng, thì T[i]là phần nguyên của 4294967296*|sin(i)| , i được tính theo radian.

Làm như sau :

/* Xử lý mỗi khối 16 word */
For i = 0 to N/16-1 do

/* Copy block i into X. */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end /* of loop on j */

/* Lưu A vào AA, B vào BB, C vào CC, D và DD . */
AA = A
BB = B
CC = C
DD = D

/* Vòng 1. */
/* Ký hiệu [abcd k s i] nghĩa là thực hiện như sau :
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
/* Thực hiện : */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

/* Vòng 2. */
/*Ký hiệu [abcd k s i] nghĩa là thực hiện như sau
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
/* Thực hiện : */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

/* Vòng 3. */
/* Ký hiệu [abcd k s t] nghĩ là làm như sau
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
/* Thực hiện :*/
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]

/* Vòng 4. */
/* Ký hiệu [abcd k s t] nghĩa là làm như sau
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
/* Thực hiên: */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

/* Then perform the following additions. (That is increment each
of the four registers by the value it had before this block was started.) */

/* Sau đó làm các phép cộng sau. ( Nghĩa là cộng vào mỗi thanh ghi giá trị của nó trước khi vào vòng lặp ) */

A = A + AA
B = B + BB
C = C + CC
D = D + DD

end /* of loop on i */

3.5 - Bước 5 : In ra

Mã số thông điệp được tạo ra là A,B,C,D. Nghĩa là chúng ta bắt đầu từ byte thấp của A, kết thúc với byte cao của D.

Đến đây đã mô tả xong thuật toán MD5. Mã nguồn tham khảo viết bằng C có thể tìm thấy ở phụ lục.

4. Tổng kết

Thuật toán số hóa thông điệp MD5 khá đơn giản để thực hiện, cung cấp một dạng ``vân tay`` hay mã số của thông điệp với độ dài tùy ý. Người ta cho rằng độ khó để tìm được 2 thông điệp có cùng mã số là khoảng 2^64 bước tính, và độ khó để tim được một thông điệp với mã số cho trước là 2^128 bước tính. Thuật toán MD5 đã được dò tìm điểm yếu một cách cẩn thận. Tuy nhiên đây là một thuật toán tương đối mới ( ! ) và việc phân tích cẩn thận về sự an toàn là cần thiết.

5. Sự khác nhau giữa MD4 và MD5

Sau đây là sự khác nhau giữa MD4 và MD5 :

1. Vòng 4 đã được thêm vào

2. Mỗi bước đều được thêm vào một hằng số duy nhất

3. Hàm G ở vòng 2 được đổi từ (XY v XZ v YZ) thành (XZ v Y not(Z)) để làm giảm sự đối xứng trong G.

4. Mỗi bước đều sử dụng kết quả từ bước trước . Điều này nhằm tạo ra ``hiệu ứng dây chuyền`` nhanh hơn

5. Thứ tự các word đầu vào ở vòng 2 và vòng 3 được thay đổi, để làm cho hai mẫu này ít giống nhau hơn

6. Số bit dịch chuyển ở mỗi vòng được tối ưu hóa, để tạo ra ``hiệu ứng dây chuyền`` nhanh hơn. Lượng dịch chuyển ở mỗi vòng là khác nhau.

Tài liệu tham khảo

[1] Rivest, R., ``The MD4 Message Digest Algorithm``, RFC 1320, MIT and
RSA Data Security, Inc., April 1992.

[2] Rivest, R., ``The MD4 message digest algorithm``, in A.J. Menezes
and S.A. Vanstone, editors, Advances in Cryptology - CRYPTO `90
Proceedings, pages 303-311, Springer-Verlag, 1991.

[3] CCITT Recommendation X.509 (1988), ``The Directory -
Authentication Framework.``

Xem xét về tính bảo mật

Độ bảo mật bàn đến trong bài viết này được coi là đủ để tạo ra những mô hình chữ ký điện tử kết hợp giữa MD5 và một hệ mã hóa công khai

Liên hệ với tác giả

Ronald L. Rivest
Massachusetts Institute of Technology
Laboratory for Computer Science
NE43-324
545 Technology Square
Cambridge, MA 02139-1986

Phone: (617) 253-5880
EMail: rivest@theory.lcs.mit.edu

(Biên dịch: Popeye - HVA Translator)

[Crypto] NGHIÊN CỨU KỸ THUẬT MÃ HÓA KHÓA CÔNG KHAI


NGHIÊN CỨU KỸ THUẬT MÃ HÓA KHÓA CÔNG KHAI, CÀI ĐẶT THUẬT TOÁN MÃ HÓA VÀ GIẢI MÃ BẰNG KỸ THUẬT MÃ HÓA KHÓA CÔNG KHAI


http://www.kh-sdh.udn.vn/zipfiles/sv2008-tb12/3.nam-hoai.pdf

[Crypto] Tìm hiểu MD5 và các giải thuật mã hóa

MD5 (Message-Digest algorithm 5) là một hàm băm để mã hóa với giá trị băm là 128bit. Từng được xem là một chuẩn trên Internet, MD5 đã được sữ dụng rông rải trong các chương trình an ninh mạng, và cũng thường được dùng để kiểm tra tính nguyên vẹn của tập tin.

MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm băm trước đó, MD4 (cũng do ông thiết kế, trước đó nữa là MD2).

MD5 có 2 ứng dụng quan trọng:

1/ MD5 được sử dụng rộng rải trong thế giới phần mềm để đảm bảo rằng tập tin tải về không bị hỏng. Người sử dụng có thể so sánh giữa thông số kiểm tra phần mềm bằng MD5 được công bố với thông số kiểm tra phần mềm tải về bằng MD5. Hệ điều hành Unix sử dụng MD5 để kiểm tra các gói mà nó phân phối, trong khi hệ điều hành Windows sử dụng phần mềm của hãng thứ ba.

2/ MD5 được dùng để mã hóa mật khẩu. Mục đích của việc mã hóa này là biến đổi một chuổi mật khẩu thành một đoạn mã khác, sao cho từ đoạn mã đó không thể nào lần trở lại mật khẩu. Có nghĩa là việc giải mã là không thể hoặc phải mất một khoãng thời gian vô tận (đủ để làm nản lòng các hacker).

MD5 (Message-Digest algorithm 5) là một hàm băm để mã hóa với giá trị băm là 128bit. Từng được xem là một chuẩn trên Internet, MD5 đã được sữ dụng rông rải trong các chương trình an ninh mạng, và cũng thường được dùng để kiểm tra tính nguyên vẹn của tập tin.

MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm băm trước đó, MD4 (cũng do ông thiết kế, trước đó nữa là MD2).

MD5 có 2 ứng dụng quan trọng:

1/ MD5 được sử dụng rộng rải trong thế giới phần mềm để đảm bảo rằng tập tin tải về không bị hỏng. Người sử dụng có thể so sánh giữa thông số kiểm tra phần mềm bằng MD5 được công bố với thông số kiểm tra phần mềm tải về bằng MD5. Hệ điều hành Unix sử dụng MD5 để kiểm tra các gói mà nó phân phối, trong khi hệ điều hành Windows sử dụng phần mềm của hãng thứ ba.

2/ MD5 được dùng để mã hóa mật khẩu. Mục đích của việc mã hóa này là biến đổi một chuổi mật khẩu thành một đoạn mã khác, sao cho từ đoạn mã đó không thể nào lần trở lại mật khẩu. Có nghĩa là việc giải mã là không thể hoặc phải mất một khoãng thời gian vô tận (đủ để làm nản lòng các hacker).

Download:


http://www.tchq.edu.vn/Thuvien/FileUpload/Phanmem/MD5.pdf

[Crypto] Kĩ thuật Mã hoá trong Mạng máy tính

link :http://vietfov.net/press/825

Ngày nay, các sản phẩm của mã hoá luôn có mặt khắp nơi trong đời sống thường ngày, đối với ngành IT, đây là yếu tố không thể thiếu trong mọi ứng dụng hiện đại, đặc biệt là đối với lĩnh vực giao dịch điện tử & bảo mật mạng.

mahoa1

Chúng ta sẽ tìm hiểu đôi nét về kĩ thuật mã hoá với những nội dung:

I. Tổng quan về mã hoá
II. Kĩ thuật mã hoá chung
III. Ứng dụng thực tiễn
IV. Các công cụ mã hoá

I. Tổng quan về mã hoá

Mã hoá là gì? Mã hoá là một tiến trình biến đổi thông tin, sử dụng các thuật toán nhằm mục đích không cho người khác có thể nắm bắt được nếu thiếu một vốn thông số nhất định (key) để dịch ngược.
Đi kèm với mã hoá là giải mã.

Có rất nhiều loại thuật toán mã hoá cho dữ liệu máy tính, chúng được gọi tên theo thuật toán và có thể so sánh trực tiếp với nhau, ví dụ mã hoá 128-bit, Triple-DES, 2048-bit RSA.

Trong cùng một loại, dĩ nhiên một phép mã hoá 2048-bit RSA sẽ mạnh mẽ hơn phép mã hoá 1024-bit RSA.
Nhưng như vậy không có nghĩa là một phép mã hoá với độ dài dãy bit lớn được xem là an toàn. Thử liên tưởng đến ngôi biệt thự của bạn, với chiếc cổng được khoá bằng ổ khoá 4 chân, mỗi chân như vậy có thể nằm trong 10 vị trí, ổ khoá chỉ mở được khi 4 chân được sắp theo mã khoá của chủ nhà, và để vượt qua, 1 tên trộm cần phải dùng tối đa 10.000 phép thử (brute-force attack). Nhưng nếu tăng ổ khoá lên 10 chân, sẽ tạo nên 10 triệu khe cắm khoá hợp lệ, thì không ai đủ sự thông minh (hay sự ngu dốt) để mở chiếc khoá bằng cách tấn công thuật toán này. Họ có thể phá cửa sổ, hay thậm chí là phá chiếc cổng, giả danh chính quyền, thợ nước… để đột nhập vào căn nhà của bạn. Một ổ khoá tốt không thể chống lại những kiểu tấn công như thế được.

Điều đó cho thấy một thuật toán mã hoá cực mạnh sẽ chỉ hữu ít nếu được sử dụng ở đúng những nơi cần thiết, không phải lúc nào cũng là tối ưu. Cái cần bảo vệ ở trên chính là ngôi nhà của bạn chứ không phải là đặt một hàng rào bẫy và hi vọng kẻ trộm sẽ dính vào cái bẫy đó.
Với sự phát triển mạnh mẽ của mình, hầu hết các kênh thông tin đều lấy Internet làm nền tảng để phát triển. Điều tất yếu sẽ nảy sinh là vấn đề An toàn thông tin, một ngày nào đó, bạn bỗng nhận ra rằng, thông tin của bạn đang bị theo dõi.

Để vừa đảm bảo thông tin luôn kết nối, vừa đảm bảo yếu tố bảo mật của thông tin thì phương pháp tốt nhất là mã hoá thông tin.
Ngày nay việc mã hoá đã trở nên phổ cập, các quốc gia hay là các công ty lớn đều có chính sách phát triển công cụ mã hoá riêng biệt để bảo vệ cho chính thông tin của họ.

Trên thế giới hiện có rất nhiều các loại thuật toán, trong khuôn khổ bài báo cáo, chúng ta chỉ tìm hiểu về các thuật toán được ứng dụng phổ biển trong Internet.

mahoa2

Mật mã hóa được sử dụng phổ biến để đảm bảo an toàn cho thông tin liên lạc. Các thuộc tính được yêu cầu là:

1) Bí mật: Chỉ có người nhận đã xác thực có thể lấy ra được nội dung của thông tin chứa đựng trong dạng đã mật mã hóa của nó. Nói khác đi, nó không thể cho phép thu lượm được bất kỳ thông tin đáng kể nào về nội dung của thông điệp.

2) Nguyên vẹn: Người nhận cần có khả năng xác định được thông tin có bị thay đổi trong quá trình truyền thông hay không.

3) Xác thực: Người nhận cần có khả năng xác định người gửi và kiểm tra xem người gửi đó có thực sự gửi thông tin đi hay không.

II. Kĩ thuật mã hoá chung

Các kĩ thuật mã hoá đều sử dụng các khoá (key) làm tác nhân thực hiện việc khoá mã, thông thường khoá được thể hiện bằng độ dài của khoá tính theo bit, số bits càng lớn thì tính bảo mật của phép mã hoá càng cao, có thể hiểu nôm na một khoá là một mật khẩu. Thông thường, để an toàn thì các khoá thường có độ dài 128bits, nghĩa là phương pháp tấn công vét cạn sẽ phải dò 2^128 trường hợp.

Có 3 kĩ thuật mã hoá chính:

1) Mã hoá đối xứng (Symmetric-key algorithms) – AES, IDEA, DES

Là các thuật toán mã hoá và giải mã trong đó các khoá (key) dùng cho việc mã hoá và giải mã có quan hệ ràng buộc với nhau (về mặt toán học) hoặc là như nhau.

Hạn chế của mã hoá đối xứng là khi trao đổi, khoá mã phải được 2 bên nắm giữ, do vậy việc bảo vệ an toàn cho khoá mã là một việc hết sức khó khăn. Để đảm bảo việc thông tin liên lạc được an toàn trong một nhóm n người thì bắt buộc số lượng chìa khoá phải là n(n-1)/2. Do tính chất này, để tránh rườm ra, người ta phân phối mã khoá này bằng phương pháp mã hoá bất đối xứng khi có một phiên giao dịch, lúc đó ít nhiều sẽ dễ dàng quản lý mã khoá hơn thông thường.

Ví dụ điển hình:

Ngày xưa, khi chưa có máy tính, người ta đã vận dụng phương pháp mã hoá đối xứng bằng một miếng bìa có đục lỗ theo ý của người viết mã (đóng vai trò là key), áp miếng bìa lên một mặt giấy, các kí tự từ văn bản gốc sẽ lần lượt được ghi lên giấy qua các lỗ hổng, sau khi hoàn tất, các khoảng trống trên mặt giấy sẽ được điền các kí tự ngẫu nhiên. Có thể nhận xét ngay, việc giải mã thông tin đó hầu như là không thể nếu không có miếng bìa (key) để tra ngược lại.

Ngày nay người ta sử dụng nhiều thuật toán thao tác trên bit (xor, shift) để biến đổi thông tin cần được mã hoá, các phép toán này được thực hiện hàng chục vòng lặp (các giai đoạn monkey around) khiến cho việc dịch ngược là vô cùng khó khăn nếu không có key.

2) Mã hoá bất đối xứng (Public key cryptography) – RSA

Mã hoá bất đối xứng là kĩ thuật mã hoá sử dụng một cặp khoá dùng để mã hoá và giải mã thông tin. Khoá được dùng để mã hoá gọi là khoá công khai (public key), khoá dùng để giải mã thông tin là khoá riêng tư (private key). Để trao đổi thông tin, một chỉ cần public hoá mã khoá công khai của mình (Public key), người khác dựa vào mã public đó để mã hoá thông điệp cần được gửi. Ví dụ mỗi bên A, B sẽ có một public key (PU ) private key (PR) riêng mình. A tạo ra PUA và PRA. B tạo ra PUB và PRB. PUA sẽ được A gửi cho B và khi B muốn truyền dữ liệu cho A thì B sẽ mã hóa bằng PUA. A sẽ giải mã bằng PRA. Ngược lại nếu A muốn truyền cho B thì A sẽ mã hóa bằng PUB và B giải mã bằng PRB. PRA và PRB không bao giờ được truyền đi và chỉ được giữ riêng cho mỗi bên.

Nói cách khác, mọi người đều có thể mã hóa nhưng chỉ có người biết khóa cá nhân (bí mật) mới có thể giải mã được.

Với cách thức này, khái niệm chữ kí điện tử ra đời, khi một thông tin (chữ kí) đã được mã hoá bằng một khoá công khai (public key), để thử xem đó có phải là chữ kí của bạn hay không, bạn có thể mã hoá chúng bằng khoá riêng tư, sau đó giải mã bằng khoá công khai của chính bạn, nếu thông tin không bị sai lệch thì đó chính là chữ kí của bạn.

3) Mã hoá một chiều (hàm băm):

Tên gọi của nó đã gợi lên ý niệm là chuỗi mã hoá không thể bị dịch ngược lại. Người ta đã chứng minh được rằng, mỗi chuỗi đã mã hoá chỉ có thể là ánh xạ của duy nhất một chuỗi chưa mã hoá nhập vào ; có nghĩa là một mật khẩu chỉ có thể được mã hoá ra một chuỗi duy nhất và ngược lại. Các thuật toán mã hoá một chiều được dùng nhiều trong quá trình xác thực, lưu mật khẩu, thông tin thẻ tín dụng… Nền tảng của loại này có thể xếp vào cùng loại với mã hoá đối xứng. Trong giao dịch điện tử, chìa khoá chính là mật khẩu mà người sử dụng đã chọn lựa sẽ được dùng để mã hoá thông tin của khách hàng, còn mật khẩu sẽ được mã hoá theo hàm băm một chiều, các hackers hay thậm chí là admin của trang giao dịch dù có lấy được dữ liệu lưu trên máy chủ cũng không thể nào dịch ngược nếu không biết được mật khẩu (key) của user.

Ban đầu, người dùng nhập mật khẩu dưới dạng text và gửi yêu cầu xác thực. Mật khẩu này sẽ được mã hoá băm (chẳng hạn là MD5). Quá trình kiểm tra nếu trùng với chuỗi mã hoá đã lưu ở máy chủ thì mật khẩu đó là hợp lệ.

Các thuật toán nổi tiếng được sử dụng nhiều nhất là MD-5 (Message-Digest algorithm 5) và các thuật toán SHA (SHA-1, SHA-2). Mọi ứng dụng từ các forum như IPB, VBB cho đến Yahoo! đều ứng dụng trong việc mã hoá mật khẩu của users.

Theo nhận xét được ghi trong chuẩn của FIPS 180-2:

1) Cho một giá trị băm nhất định được tạo nên bởi một trong những thuật giải SHA, việc tìm lại được đoạn dữ liệu gốc là không khả thi.

2) Việc tìm được hai đoạn dữ liệu nhất định có cùng kết quả băm tạo ra bởi một trong những thuật giải SHA là không khả thi. Bất cứ thay đổi nào trên đoạn dữ liệu gốc, dù nhỏ, cũng sẽ tạo nên một giá trị băm hoàn toàn khác với xác suất rất cao.

* MD5 chuyển đổi thông tin có chiều dài bất kì thành một chuỗi có độ dài 128 bit không đổi với xác suất khác biệt cao, được biểu diễn bằng 32 số mã hex.

MD5(“The quick brown fox jumps over the lazy dog“)
= 9e107d9d372bb6826bd81d3542a419d6
Thậm chí một sự thay đổi nhỏ trong mẩu tin cũng dẫn đến thay đổi hoàn toàn bảng băm, do hiệu ứng tuyết lở. Ví dụ, thay d thành e:
MD5(“The quick brown fox jumps over the lazy eog“)
= ffd93f16876049265fbaef4da268dd0e
Bảng băm của một chuỗi rỗng là:
MD5(“”)
= d41d8cd98f00b204e9800998ecf8427e

MD5 rất khó để có thể giải mã ngược chiều. Hiện nay cách đơn giản và hiệu quả nhất của việc giải mã MD5 là dựng các databases của các giá trị mã hoá MD5, trước tiên hackers cung cấp các công cụ cho phép người dùng xem mã MD5 của một chuỗi người dùng nhập vào, kết quả sẽ được trả về đồng thời nó cũng được lưu vào DB trong máy chủ, dần dần tạo nên một khối DB khổng lồ. http://gdataonline.com

Chính vì lý do này, MD5 đã được cải tiến, ngoài giá trị nhập vào của người dùng (thường là password) máy tính sẽ tạo thêm một mã ngẫu nhiên (random salt) được sinh và lưu ở máy chủ để “trộn” 2 lần vào chuỗi nhập sau đó mới MD5 kết quả cuối cùng.
return md5( md5( $salt ) . $md5_once_password );

Vì vậy nếu bằng một cách nào đấy, hackers sniff được đoạn MD5(password) của bạn thì việc dịch ngược cũng bó tay vì không thể nào có được mã salt. Và dù cho hackers biết được mã salt thì việc dịch ngược cũng là bất khả thi bởi DB có sẵn không thể nào lường hết được các kí tự của mã salt này.


III. Ứng dụng thực tiễn

Trong việc mã hoá truyền thông trên Internet, nổi bật hiện nay là giao thức SSL (Secure Socket Layer), áp dụng cả 3 kĩ thuật mã hoá trên.
SSL là giao thức đa mục đích được thiết kế để tạo ra các giao tiếp giữa hai chương trình ứng dụng trên một cổng định trước (socket 443) nhằm mã hoá toàn bộ thông tin đi/đến, mà ngày nay được sử dụng rộng rãi cho giao dịch điện tử như truyền số hiệu thẻ tín dụng, mật khẩu, số bí mật cá nhân (PIN) trên Internet.

Điểm cơ bản của SSL được thiết kế độc lập với tầng ứng dụng để đảm bảo tính bí mật, an toàn và chống giả mạo luồng thông tin qua Internet giữa hai ứng dụng bất kỳ, thí dụ như webserver và các trình duyệt khách (browsers), do đó được sử dụng rộng rãi trong nhiều ứng dụng khác nhau trên môi trường Internet.

mahoa3

Chúng ta chỉ phân tích cơ chế để hiểu rõ thêm ứng dụng của các kĩ thuật mã hoá vào giao thức này.

Để dễ hiểu, phần này sẽ trình bày qua ví dụ cụ thể: Alice trao đổi thông tin với Bob bằng công nghệ khóa chung. Type_of_key{message} có nghĩa là message được mã hóa hoặc giải mã bằng với loại thuật toán đang dùng (Type_of_key).

Alice cần chắc chắn là mình sẽ nói chuyện với Bob mà không phải là một ai khác. Alice sẽ tiến hành xác thực (authenticate) Bob. Bob có một cặp khóa gồm một khoá công khai (public key) và một khóa riêng (private key). Bob cho Alice biết trước khoá công khai (public key) của mình (sẽ nói sau bằng cách nào). Alice sẽ tạo ra một thông điệp ngẫu nhiên (random message) và gởi nó đến Bob:

A->B Random_message

Bob dùng khóa riêng (private key) của mình để mã hóa thông điệp vừa nhận được và gởi trả lại cho Alice:

B->A private_Bob(Random_message)

Alice nhận được message từ Bob, dùng khoá công khai (public key) của Bob để giải mã message này và sau đó so sánh message vừa giải mã được với Random_message đã gởi đi. Nếu giống nhau, Alice có thể tin chắc rằng mình đang nói chuyện với Bob.

1. Digest

Thay vì phải mã hóa toàn bộ message nhận được từ Alice, Bob có thể xây dựng một bản tóm tắt (digest) của message bằng hàm băm một chiều (hash one-way), sau đó mã hóa digest bằng khóa riêng (private key) của mình và gởi cho Alice. Alice sẽ dùng khoá công khai (public key) của Bob để giải mã digest do Bob gởi tới và tính digest của message đã được gởi đi, sau đó so sánh hai digest này với nhau. Nếu trùng nhau, có nghĩa Alice có thể tin chắc là mình đang nói chuyện với Bob.

Digest thực chất là chỉ là một số nguyên (integer). Hai thuật toán phổ biến được dùng để tạo digest là MD5 hash 128bit, SHA hash 160 bit. Ai đó có được digest của Bob cũng không thể nào suy luận ra được message nguyên bản(original) vì digest chỉ là giá trị hash một chiều. Hai message khác nhau sẽ có digest khác nhau, khả năng trùng nhau xấp xỉ là 0.

2. Chữ kí điện tử (digital signature)

mahoa4

Theo cách ở trên thì Bob đã kí (sign) message do Alice gởi tới, nhưng nếu như ai đó đã thay đổi message này thì sao? Vì vậy cần thay đổi một chút như sau:

A->B Chào, Có phải Bob đó không?
B->A Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây!”]}

Như bạn thấy Bob không hề kí message của Alice. Thay vào đó, Bob sẽ gởi một mesage khác (không bị mã hóa) và digest của của message này (đã được mã hóa bằng khóa riêng (private key) của Bob) đến cho Alice. Bob chỉ tin tưởng vào chính mình. Alice dễ dàng thẩm tra Bob bằng cách dùng khoá công khai (public key) của Bob giải mã digest nhận được, sau đó tính digest của message nhận từ Bob và so sánh hai digest này với nhau. Digest mà Bob gởi tới Alice chính là một chữ kí điện tử. Nó kí cho message “Alice, Mình là Bob đây!” để đảm bảo chắc chắn là message này không bị ai đó thay đổi gì khi đến Alice. Nếu thay đổi Alice sẽ biết ngay qua việc thẩm tra digest.

3. Trao khoá công khai (public key)

Bob trao khoá công khai (public key) của mình cho Alice bằng cách nào? Bạn hãy xem thử giao thức sau:

A->B Xin chào!
B->A Chào, Mình là Bob. Đây là public key của mình!
A->B Hãy đưa bằng chứng đi!
B->A Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây!”]}

Với cách này thì ai cũng có thể giả mạo Bob và trao khoá công khai (public key) của họ cho Alice, làm cho Alice tưởng lầm là mình đang nói chuyện với Bob.

Để giải quyết vấn đề này, Alice và Bob có thể dùng giấy chứng nhận điện tử

4. Giấy chứng nhận điện tử (digital certificate)

mahoa5

Giấy chứng nhận điện tử dùng để chứng nhận khoá công khai (public key) của một cá nhân nào đó. Một giấy chứng nhận điện tử thường bao gồm các thứ sau:

- Tên cơ quan cấp giấy chứng nhận (issuer’s name)
- Tên thực thể (entity) được cấp giấy chứng nhận(còn được gọi là đối tượng – subject)
- Khoá công khai (public key) của subject
- Tem thời gian (time-stamps) cho biết thời gian có hiệu lực của giấy chứng nhận

Chỉ có các cơ quan có thẩm quyền Certificate Authority (thường được gọi tắt là CA) mới đươc phép cấp giấy chứng nhận. Giấy chứng nhận được kí bằng khóa riêng (private key) của người cấp. CA cũng được tổ chức theo dạng cây “hierarchy” tương tự như domain-name. Dĩ nhiên bạn cũng có thể tạo ra một CA mới cho riêng cho mình.

Chúng ta hãy xem giao thức mới này:

A->B Xin chào!
B->A Chào, Mình là Bob. Đây là giấy chứng nhận của mình!
A->B Hãy đưa bằng chứng đi!
B->A Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây!”]}

Bằng cách gửi Giấy chứng nhận điện tử (digital certificate) của mình cho Alice (có nghĩa là alice sẽ biết khoá công khai của Bob) thì bắt buộc thông điệp phải được mã hoá bằng chính private key của Bob thì Alice mới xác nhận được.

Ai đó dùng giấy chứng nhận của Bob để giả mạo Bob sẽ bị Alice phát hiện ngay!

A->M Xin chào
M->A Chào, Mình là Bob. Đây là giấy chứng nhận của mình!
A->M Hãy đưa bằng chứng đi!
M->A ???

Mallet không biết khóa riêng (private key) của Bob nên không thể xây dựng được message để Alice có thể tin mình là Bob.

5. Trao đổi khóa bí mật (secret-key)

Sau khi Alice đã xác thực mình đang nói chuyện với Bob, Alice sẽ gởi cho Bob một message đã bị mã hóa bằng khoá công khai (public key) của Bob:

A->B public_Bob{“khóa_bí_mật”}

Bằng cách này, chỉ có Bob mới có thể giải mã message trên và lấy được khóa bí mật bởi vì chỉ có Bob mới biết được khóa riêng (private key) để giải mã. Trao đổi khóa bí mật bằng công nghệ khoá công khai (public key) cực kì an toàn. Không một ai ngoại trừ Alice và Bob biết được khóa bí mật. Trong SSL, khóa bí mật này chính là khóa phiên giao dịch giữa 2 người ở thời điểm đó (session key). Kể từ đây Alice và Bob sẽ dùng khóa phiên để trao đổi dữ liệu cho nhau. Khóa phiên được tạo ra trong mỗi phiên kết nối SSL và hoàn toàn bí mật (chỉ có Alice và Bob biết) nên rất an toàn. Công nghệ chuyên chở khóa phiên bằng khoá công khai (public key) và dùng khóa phiên như một khóa đối xứng bí mật để trao đổi dữ liệu cho nhau còn được biết đến với cái tên là hybrid, tức là kết hợp cả hai phương pháp mã hóa dùng kĩ thuật mã hoá đối xứng và mã hoá bất đối xứng.

Đây là giao thức mới:

A->B Xin chào!
B->A Chào, Mình là Bob. Đây là giấy chứng nhận của mình!
A->B Hãy đưa bằng chứng đi!
B->A Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây!”]}
A->B Ok Bob, Đây là khoá bí mật của chúng ta public_Bob{“khóa_bí_mật”}
B->A khóa-bí-mật{message 1}
B->A
khóa-bí-mật{message 2}

6. Tấn công man-in-the-middle

Giao thức trên chưa phải là an toàn tuyệt đối. Mallet ngồi giữa Alice và Bob có thể chơi trò tấn công man-in-the-middle như sau:

A->M Xin chào!
M->B Xin chào!

B->M Chào, Mình là Bob. Đây là giấy chứng nhận của mình!
M->A Chào, Mình là Bob. Đây là giấy chứng nhận của mình!

A->M Hãy đưa bằng chứng đi!
M->B Hãy đưa bằng chứng đi!

B->M Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây!”]}
M->A Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây!”]}

A->M Ok Bob, đây là khoá bí mật của chúng ta public_Bob{“khóa_bí_mật”}
M->B Ok Bob, đây là khoá bí mật của chúng ta public_Bob{“khóa_bí_mật”}

B->M khóa-bí-mật{something}
M->A Editted [khóa-bí-mật{something}]

Mallet sẽ chuyển tiếp dữ liệu giữa Alice và Bob cho đến khi họ trao đổi khóa bí mật. Tại thời điểm này Alice nghĩ rằng mình đang nói chuyện với Bob nên tin tưởng hoàn toàn vào các message do Bob gởi tới. Thực chất không phải là như vậy. Mallet mặc dù không biết khóa bí mật nhưng hoàn toàn có thể xén, thêm hoặc sửa đổi gì đó trên các dữ liệu được gởi từ Bob đến Alice.

7. Mã xác thực thông điệp (MAC)

Để ngăn chặn cuộc tấn công man-in-the-middle trên, Alice và Bob có thể dùng thêm mã xác thực thông điệp (Message Authentication Code) thường được gọi tắt là MAC. Thuật toán tạo MAC khá đơn giản:

Code:
MAC = Digest[some message, khóa bí mật]

Mallet không biết khóa bí mật nên không tài nào tính đúng giá trị digest của message.

Đây là toàn bộ giao thức:

A->B Xin chào!
B->A Chào, Mình là Bob. Đây là giấy chứng nhận của mình!
A->B Hãy đưa bằng chứng đi!
B->A Alice, Mình là Bob đây!
private_Bob{digest[“Alice, Mình là Bob đây!”]}
A->B Ok Bob, đây là khoá bí mật của chúng ta public_Bob{“khóa_bí_mật”}
khóa-bí-mật{something, MAC}

mahoa6

Toàn bộ cấp độ bảo mật và an toàn của thông tin/dữ liệu phụ thuộc vào một số tham số:

(i) Số nhận dạng theo phiên làm việc ngẫu nhiên (session ID);
(ii) Cấp độ bảo mật của các thuật toán bảo mật áp dụng cho SSL;
(iii) Độ dài của khoá chính (key length) sử dụng cho lược đồ mã hoá thông tin.

IV. Các công cụ mã hoá

BitLocker: BitLocker là ứng dụng mã hóa tích hợp sẵn trong Vista Enterprise và Vista Ultimate có chức năng bảo vệ toàn diện này. BitLocker nằm trong Windows Security Control Panel.

TrueCrypt (www.truecrypt.org) – Free source code

Ohos Mini Drive (http://www.rohos.com) – Shareware

PGP Desktop (http://na.store.pgp.com) – 99USD

Encrypt & Decrypt MD5 Hashes – http://md5encryption.com/
….

*Tài liệu tham khảo

Applied Cryptography, Second Edition Protocols, Algorthms, and Source Code in C – Bruce Schneier

Cryptography & Network Security Principles & Practices_4thEd -William_Stallings

Cryptography – An Introduction To Cryptography – Network Associates, Inc.

Wikipedia

-fov-