|
|
Haizzz. Câu hỏi của mình ở trên thật ngu ngốc
MAC chỉ là một loại message digest. Mục đích sử dụng MAC chỉ là để:
- Đảm bảo tính toàn vẹn cho message bên trong, nhờ đó phát hiện sự cắt xén data của Mallet trong cuộc hội thoại giữa Alice và Bob.
- Đảm bảo tính xác thực: Vì MAC sử dụng secret key làm một trong hai input để tính digest. Alice sẽ biết được người gửi message này phải là người có secret key như của cô ấy.
Đến đây, mình lại có câu hỏi thế này:
Tại sao MAC = digest{message, secret key} ? Mình thấy chỉ cần MAC = digest{message} là cũng đủ rồi mà.
Lý do mình dẫn đến thắc mắc này:
Bởi vì thông điệp được truyền đi ở dạng {message, MAC}secret key. Mallet ở giữa đâu biết được secret key. Mallet cũng chỉ cắt xén thôi chứ đâu có đọc được message. Mà việc cắt xén đó có thể nhận ra chỉ bằng so khớp digest{message} và MAC mà (Ở đây, mình giả định MAC = digest{message}).
|
|
|
Chào các bạn. Mình vừa đọc xong bài viết "Những điều cần biết về SSL". Mình có đoạn này không hiểu rõ lắm:
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.
Như tác giả đã trình bày trong bài viết thì sau khi trao đổi khoá bí mật một cách an toàn bằng phương pháp mã hoá bất đối xứng, Alice và Bob sẽ trao đổi thông điệp được mã hoá bằng khoá bí mật này.
Mallet ở giữa cố gắng cắt xén để làm hỏng thông điệp dù không biết nội dung thông điệp vì hắn ta không có khoá bí mật.
Mình thắc mắc ở chỗ là: Khi Alice nhận được một message không toàn vẹn nữa (do bị Mallet cắt xén) thì cô ta có gặp khó khăn gì khi giải mã không ? Vi dụ như gặp thông báo lỗi cho biết thông điệp khi đó không thể giải mã nữa chẳng hạn. Nếu có thông báo lỗi như vậy rồi thì cũng chả cần MAC nữa.
Hay là mã hoá đối xứng vẫn giải mã bình thường dù cho nội dung đầu vào mã hoá bị thay đổi miễn là key hợp lệ ? Như vậy thì két quả trả về sẽ méo mó lộn xộn, chả lẽ Alice lại không nhận thấy sự bất thường đó.
|
|
|
Cảm ơn hai bạn Xnohat và Quanta đã support. Mình sử dụng Ubuntu 10.10 thì không gặp hiện tượng gì.
|
|
|
Chào các bạn.
Mình mới bắt đầu làm quen với hệ điều hành Ubuntu. Mình chọn Ubuntu 9.10
Mình thử cài đặt trên desktop thì không có vấn đề gì. Nhưng khi cài đặt trên máy laptop thì gặp lỗi.
Một số thông tin
Laptop của mình: ASUS A42F-VX248
Các hiện tượng đã diễn ra và hoạt động mà mình đã thực hiện:
- Lúc mới cài đặt ubuntu 9.10 lên laptop, mình không thể chọn bất cứ lựa chọn nào trên menu cài đặt. Tất cả lựa chọn đều dẫn đến một màn hình đen. Máy bị treo. Mình phải tắt đi khởi động lại. Mình đã xử lý nó bằng cách nhấn F4 và chọn safe graphics mode. Tuy nhiên, cách làm này không thực sự triệt để. Sau khi cài đặt xong ubuntu 9.10, máy tính tự khởi động lại và màn hình đen lại xuất hiện ngăn cản tiến trình restart. Mình phải tắt đi khởi động lại.
- Sau khi cài đặt ubuntu 9.10, mình có cài tiếp windows 7. Mình dùng live cd để thiết lập chế độ dual boot. Nhưng mình cũng phải thử mấy lần mới boot được qua live cd vì lỗi màn hình đen mặc dù đã dùng safe graphic mode. Cuối cùng thì chế độ dual boot cũng được thiết lập.
- Hôm qua, mình vẫn boot được vào ubuntu nhưng hôm nay thì không thể. Menu lựa chọn của grub loader hiện ra nhưng khi mình chọn vào ubuntu thì không được vì sau đó màn hình đen xuất hiện. Mình cũng không vào được chế độ recovery trên menu cũng vì màn hình đen. Trong khi đó, mình vẫn sử dụng được win 7.
Bạn nào có thể cho mình một chỉ dẫn được không ?
|
|
|
Cảm ơn anh Conmale đã tận tình trả lời.
Do hiểu biết còn hạn chế nên khi đặt ra những câu hỏi trên, em không biết phạm vi của chúng lại rộng như vậy. Lần sau em sẽ cố gắng đưa ra những câu hỏi cụ thể, trọng tâm hơn.
|
|
|
Chào các bạn.
Mình đang đọc tài liệu Java EE 6 Tutorial: http://download.oracle.com/javaee/6/tutorial/doc/index.html
Mình gặp phải thuật ngữ container service tại http://download.oracle.com/javaee/6/tutorial/doc/bnabo.html.
Ở đó, họ bảo container là một giao diện giữa các components và các tính năng hữu ích mà nền tảng hỗ trợ cho các components đó. Mình không hiểu lắm cách giải thích này. Mình nhìn hình vẽ bên dưới (Nằm trong tài liệu mà mình trỏ liên kết đến) thì nhận thấy container như tên gọi của nó thì giống như cái hộp chứa các component ở bên trong nhưng không rõ lắm chức năng giao tiếp của nó được thực hiện như thế nào. Container là một file nén chứa các component hay là một thành phần mà ta cần phải code để có được nó ? Hẳn là khái niệm còn trừu tượng đối với mình.
Mình cần các bạn giải thích cho mình năm điểm xung quanh định nghĩa về container service của sun:
Containers are the interface between a component and the low-level platform-specific functionality that supports the component.
- Container giao tiếp với các component mà nó chứa như thế nào ?
- Container giao tiếp với các container khác như thế nào ?
- Bạn có thể mô tả cho mình thấy giao diện của container được không ?
- Tính năng hữu ích mà nền tảng bên dưới hỗ trợ cho component đó là gì ?
- Nền tảng ở đây ngoài ám chỉ API + JVM thì có bao gồm cả hệ điều hành không ?
Mình đặt câu hỏi này chỉ là vì muốn có cái nhìn cụ thể hơn để sau này nếu đi vào triển khai thì khỏi bỡ ngỡ.
|
|
|
Vâng cảm ơn anh. Em sẽ đọc kỹ hơn để diễn đạt chuẩn xác hơn.
|
|
|
Sao thẻ code lại không có tác dụng nhỉ. Vậy là không thể tự đưa thẻ định dạng vào bằng cách gõ tên thẻ đó.
Mình định edit lại những lại nhận được thông báo "Cấm truy cập".
Khi nào sử dụng lại được chức năng edit. Mình hứa sẽ sửa lại bài viết cho rõ ràng.
|
|
|
Mình đã biết tại sao lại bị lỗi đó rồi. Mình chưa có tham số khai báo classpath.
Lạ thật, mình tham khảo tài liệu hướng dẫn của sun thì không thấy đề cập gì đến khai báo classpath cả:
http://download.oracle.com/javase/1.3/docs/tooldocs/solaris/jdb.html
Khi mình thực hành sử dụng jdb, mình có xem hướng dẫn trên javaworld và cũng không thấy có lưu ý về việc này:
http://www.javaworld.com/javaworld/javaqa/2000-06/04-qa-0623-jdb.html
Mã nguồn mình dùng để debug mình cũng lấy từ hướng dẫn trên javaworld.
Mình đã mất công tìm hiểu về cách sử dụng jdb thì mình nghĩ cũng nên dành ít thời gian trình bày nó. Bạn nào thích command line thì có lẽ cũng sẽ thích dùng thử cái jdb này.
Vẫn mã nguồn như trên và file TestMe.java vẫn nằm tại I:\TestingZone.
Mình thực hiện debug bằng jdb như sau. Đây là command prompt của mình:
Code:
I:\TestingZone>javac -g TestMe.java
I:\TestingZone>jdb -classpath . TestMe
Initializing jdb ...
> stop in TestMe.main
Deferring breakpoint TestMe.main.
It will be set after the class is loaded.
> [b]run[/b]
run TestMe
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
>
VM Started: Set deferred breakpoint TestMe.main
Breakpoint hit: "thread=main", TestMe.main(), line=7 bci=0
7 TestMe testMe = new TestMe();
main[1] step
>
Step completed: "thread=main", TestMe.<init>(), line=14 bci=0
14 public TestMe() {
main[1] step
Chương trình của bạn bị dừng lại tại breakpoint đã set. Ở đây là dòng đầu tiên của main method của class TestMe. Để chạy các dòng lệnh kế tiếp nhau bạn dùng lệnh step.
Nếu muốn set breakpoint theo line number thì bạn có thể sử dụng cú pháp sau:
stop at <class id>:<line>
Bạn cũng có thể in thông tin về các object khi đang debug. Muốn làm được vây, bạn sẽ dùng một số command như print, dump.
Ví dụ:
Code:
Step completed: "thread=main", TestMe.main(), line=11 bci=24
11 System.out.println(toString);
main[1] print testMe
testMe = "String value: test int value: 1"
main[1] print testMe.int_value
testMe.int_value = 1
main[1] dump testMe
testMe = {
int_value: 1
string_value: "test"
}
main[1]
Bạn cũng có thể in ra toàn bộ local variable trong method hiện tại bằnng cách dùng locals
Ví dụ:
Code:
main[1] locals
Method arguments:
args = instance of java.lang.String[0] (id=335)
Local variables:
testMe = instance of TestMe(id=331)
toString = "String value: test int value: 1"
main[1]
Bạn còn có thể xem được toàn bộ member của một class bằng cách dùng các command: methods và fields
Ví dụ:
Code:
main[1] methods TestMe
** methods list **
TestMe main(java.lang.String[])
TestMe <init>()
TestMe setInt_value(int)
TestMe setString_value(java.lang.String)
TestMe toString()
java.lang.Object <init>()
java.lang.Object registerNatives()
java.lang.Object getClass()
java.lang.Object hashCode()
java.lang.Object equals(java.lang.Object)
java.lang.Object clone()
java.lang.Object toString()
java.lang.Object notify()
java.lang.Object notifyAll()
java.lang.Object wait(long)
java.lang.Object wait(long, int)
java.lang.Object wait()
java.lang.Object finalize()
java.lang.Object <clinit>()
main[1] fields TestMe
** fields list **
int int_value
java.lang.String string_value
Nếu bạn cần quản lý các thread trong chương trình bạn có thể sử dụng lênh threads để xem các thread đang tồn tại trong chương trình của bạn.
Ví dụ:
Code:
main[1] threads
Group system:
(java.lang.ref.Reference$ReferenceHandler)0x127 Reference Handler cond. waiting
(java.lang.ref.Finalizer$FinalizerThread)0x126 Finalizer cond. waiting
(java.lang.Thread)0x125 Signal Dispatcher running
(java.lang.Thread)0x124 Attach Listener running
Group main:
(java.lang.Thread)0x1 main running
main[1]
Nếu muốn tìm hiểu thêm, bạn có thể xem hướng dẫn qua help command.
Nguồn tham khảo:
- http://www.javaworld.com/javaworld/javaqa/2000-06/04-qa-0623-jdb.html
- http://download.oracle.com/javase/1.3/docs/tooldocs/solaris/jdb.html
|
|
|
Uhm do mình hiểu sai khái niệm connection-oriented và connectionless.
Cảm ơn bạn StarGhost nhé.
|
|
|
rs wrote:
explorer88 wrote:
Hôm qua, mình có biết thêm là connection tại transport thực chất là logical connection, không hẳn là có một kết nối định sẵn giữa hai endpoint tại transport layer. Tại sao lại phải dùng khái niệm logical connection ở đây nhỉ ?
Hình như bạn còn chưa phân biệt được rõ ràng vai trò của Layer Internet và Layer Transport.
Thế nào gọi là kết nối định sẵn giữa hai endpoint vậy?
Ý mình là kết nối tại TCP là logical connection, một kết nối tượng tưởng, mà ở đó các segment đi thẳng qua, chứ không phải đi qua nhiều con đường khác nhau giống như connectionless.
Mình gọi là định sẵn vì kết nối đó phải được hình thành trước khi hai endpoint trao đổi data.
Nó gần giống như khi thực hiện gọi điện thoại, cũng có một kết nối phải được định sẵn trước khi thực hiện trao đổi data nhưng khác ở chỗ là trong một cuộc gọi thì kết nối là thực (physical connection) chứ không phải là ảo (logical connection). Và thắc mắc ở đầu chủ đề dẫn mình đến thắc mắc mới là: Tại sao phải dùng khái niệm logical connection ở đây nhỉ ?
|
|
|
conmale wrote:
explorer88 wrote:
Chào các bạn.
Mình thắc mắc ở chỗ:
Tại transport layer, với giao thức TCP thì sử dụng connection-oriented, cả hai bên cần xây dựng một kết nối trước khi truyền data. Data, ở đây là các TCP segment sẽ được truyền đi trong kết nối đó.
Nhưng mà TCP segment đó phải được đóng gói vào một IP datagram để chuyển đi, mà kết nối tại network layer thì lại là connectionless nên các ip datagram sẽ được truyền đi theo các hướng khác nhau trước khi đến đích.
Vậy thì khi đó các TCP segment nằm trong IP datagram đâu có được truyền đi theo kết nối đã có ở tầng transport đâu nhỉ ?
Mình nghĩ là mình không nắm vững ở chỗ nào đó nên mới thắc mắc thế này. Rất mong các bạn chỉ cho mình biết: Mình đã sai ở chỗ nào ?
Bồ nói rõ hơn vởi đoạn màu đỏ ở trên được không? Tại sao "kết nối tại network layer lại là connectionless" là sao?
Ý của em là: TCP segment được đóng gói lại trong một IP datagram mà IP datagram được truyền đi trên mạng theo truyền thông kiểu connectionless: Không có một con đường định sẵn nào cả, các IP datagram sẽ được các router forward theo các tuyến khác nhau để đến đích.
Em xem trong wikipedia thấy họ cũng nói mô hình kết nối tại network layer là connectionless mà:
http://en.wikipedia.org/wiki/Network_Layer
Em diễn đạt có điểm nào chưa rõ ràng hay sai về mặt thuật ngữ không. Nếu có thì nhờ anh hướng dẫn để em sửa dần.
|
|
|
dreamcatcher wrote:
explorer88 wrote:
Chào các bạn.
Mình thắc mắc ở chỗ:
Tại transport layer, với giao thức TCP thì sử dụng connection-oriented, cả hai bên cần xây dựng một kết nối trước khi truyền data. Data, ở đây là các TCP segment sẽ được truyền đi trong kết nối đó.
Nhưng mà TCP segment đó phải được đóng gói vào một IP datagram để chuyển đi, mà kết nối tại network layer thì lại là connectionless nên các ip datagram sẽ được truyền đi theo các hướng khác nhau trước khi đến đích.
Vậy thì khi đó các TCP segment nằm trong IP datagram đâu có được truyền đi theo kết nối đã có ở tầng transport đâu nhỉ ?
Mình nghĩ là mình không nắm vững ở chỗ nào đó nên mới thắc mắc thế này. Rất mong các bạn chỉ cho mình biết: Mình đã sai ở chỗ nào ?
Các tầng của TCP/IP có chức năng và hoạt động độc lập với nhau. Nên ở layer 3 là connectioness chẳng liên quan gì đến việc layer 4 phải là connectioness hay connection-oriented cả.
TCP dùng cơ chế SYN - ACK để thiết lập 1 comunication session trước khi truyền tin, nó chỉ xử lý ở layer 4, còn layer 3 là gì nó không quan tâm. Khi đóng gói xong nó chuyển xuống layer 3 rồi mặc kệ thôi.
Ví dụ: mình gửi thư cho bạn, trước khi gửi thư mình có gọi điện thông báo cho bạn mình trước là sẽ gửi thư và bạn mình xác nhận (layer 4 - phiên làm việc được thiết lập, mình và bạn mình biết là có gửi thư cho nhau), sau đó mình bỏ thư vào hòm để chuyển đi (layer 3 - connectioness: mình không biết bao giờ thì thư đến chỗ bạn mình, cũng không biết thời điểm thư được lấy đi ...). Bạn mình khi nhận được thư -> xác nhận lại (layer 4). Không nhận được thư -> yêu cầu gửi lại (layer 4).
Bạn chỉ cho mình thấy cách gói tin được xử lý tại các tầng network và transport và bạn trả lời thắc mắc của mình là do các tầng thiết kế độc lập nên việc các datagram được truyền đi theo kiểu connectionless ở dưới không ảnh hưởng gì đến connection-oriented ở trên. Dù mình vẫn chưa thoả mãn lắm với câu trả lời này nhưng cũng cảm ơn bạn nhé.
Hôm qua, mình có biết thêm là connection tại transport thực chất là logical connection, không hẳn là có một kết nối định sẵn giữa hai endpoint tại transport layer. Tại sao lại phải dùng khái niệm logical connection ở đây nhỉ ?
|
|
|
Chào các bạn.
Mình thắc mắc ở chỗ:
Tại transport layer, với giao thức TCP thì sử dụng connection-oriented, cả hai bên cần xây dựng một kết nối trước khi truyền data. Data, ở đây là các TCP segment sẽ được truyền đi trong kết nối đó.
Nhưng mà TCP segment đó phải được đóng gói vào một IP datagram để chuyển đi, mà kết nối tại network layer thì lại là connectionless nên các ip datagram sẽ được truyền đi theo các hướng khác nhau trước khi đến đích.
Vậy thì khi đó các TCP segment nằm trong IP datagram đâu có được truyền đi theo kết nối đã có ở tầng transport đâu nhỉ ?
Mình nghĩ là mình không nắm vững ở chỗ nào đó nên mới thắc mắc thế này. Rất mong các bạn chỉ cho mình biết: Mình đã sai ở chỗ nào ?
|
|
|
Chào các bạn. Mình có một rắc rối. Mình mong các bạn giúp đỡ.
Đây là nội dung mã nguồn. Nó không có gì đặc biệt. Vấn đề ở chỗ mình đang tìm cách debug nó bằng jdb và vẫn chưa thành công.
Code:
public class TestMe {
private int int_value;
private String string_value;
public static void main(String[] args) {
TestMe testMe = new TestMe();
testMe.setInt_value(1);
testMe.setString_value("test");
String toString = testMe.toString();
System.out.println(toString);
}
public TestMe() {
}
public void setInt_value(int value) {
int_value = value;
}
public void setString_value(String value) {
string_value = value;
}
@Override
public String toString() {
return "String value: " + string_value + " int value: " + int_value;
}
}
File TestMe.java mình save tại I:\TestingZone
Mình thực hiện debug mã nguồn trên bằng jdb. Đây là hình ảnh trong command prompt của mình:
Code:
I:\TestingZone>javac -g TestMe.java
I:\TestingZone>jdb TestMe
Initializing jdb ...
> run
run TestMe
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
>
VM Started:
Exception occurred: java.lang.ClassNotFoundException (uncaught)"thread=main", ja
va.net.URLClassLoader$1.run(), line=202 bci=73
main[1]
Mình không hiểu tại sao lại bị lỗi ClassNotFoundException vì TestMe.class được tạo ra ngay tại thư mục I:\TestingZone. Mình không hề di dời nó đi đâu cả sau khi nó được tạo ra.
Bạn nào đó có thể chỉ cho mình lý do mình mắc lỗi này và cách sửa chữa nó được không ?
|
|
|
|
|
|
|