blob: 736f67ab0ff666ea56c813694ceeff13665ce204 [file] [log] [blame]
Design Document
===============
Chatroom Discovery
-------------------
Function
~~~~~~~~~
While running the ChronoChat application, a list of ongoing chatrooms
is maintained with the basic chatroom information which can be
presented to the user whenever he requests. The user can select to
join a chatroom. The application will check if the user is allowed to
join the chatroom. For chatrooms with hierarchical trust model, the
user will join immediately. For chatroom with web of trust
model, if one of the user's chatroom contact is in the chatroom, the
user will send a request for invitation. Otherwise, the application
will tell the user that he is disallowed to join in the chatroom.
Detailed Design
~~~~~~~~~~~~~~~~
When a user starts the ChronoChat application, the application will
begin to discover ongoing chatrooms. Each of the participants in a
chatroom needs to maintain a list of all the participants in the
chatroom for other users to query.
Two kinds of work need to be done during the chatroom discovery
process.
Discovery
+++++++++++++
A user sends a broadcast interest to query for all the ongoing
chatrooms' information with all the existing chatroom in the exclude
filter to enumerate all the existing chatrooms and avoid retrieving
the same data packet from in-network caches. (There can be problems
when there are so many chatrooms and the exclude filter exceeds the
practical limit of NDN packet size. It is an open issue. We assume
in this version that there are not so many chatrooms and we will try
to solve the problem in later version.) No chatroom
needs to be added when generating the list for the first time .
The name of the interest can be:
``/ndn/broadcast/chronochat/chatroom-list``
Every chatroom participant maintains an interest filter under the
prefix:
``/ndn/broadcast/chronochat/chatroom-list``
When a participant in a chatroom receives the interest,
the participant will check the exclude filter and send a data packet
with all the information of the chatroom if the chatroom name is not
in the exclude filter. There might be problems when there are too many
participants in one chatroom which causes the Data packet to exceed
the practical limit of NDN packet size. However, the participants'
information is only used for a user to decide whether to join a
chatroom. Therefore, in this case, we can only send the user
information of a subset of participants.
The name of the data packet can be:
``/ndn/broadcast/chronochat/chatroom-list/chatroom-name``
Because users can obtain the chatroom name through the
data name, the data packet that the information provider sends back
only need to contains: the name of every participant and the
chatroom's trust model.
For every participant, the data structure can be defined as:
::
Participant := PARTICIPANT-TYPE TLV-LENGTH
Name
For every chatroom,
::
Chatroom := CHATROOM-TYPE TLV-LENGTH
TrustModel
Participant+
TrustModel:
::
TrustModel := TRUST-MODEL-TYPE TLV-LENGTH
nonNegativeInteger
TrustModel value:
+------------------+----------------+
| TrustModel | Assigned value |
+==================+================+
| Hierarchical | 0 |
+------------------+----------------+
| Web of Trust | 1 |
+------------------+----------------+
TLV assignments:
+------------------+----------------+----------------------+
| Type | Assigned value | Assigned value (hex) |
+==================+================+======================+
| PARTICIPANT-TYPE | 128 | 0x80 |
+------------------+----------------+----------------------+
| CHATROOM-TYPE | 129 | 0x81 |
+------------------+----------------+----------------------+
| TRUSTMODEL-TYPE | 130 | 0x82 |
+------------------+----------------+----------------------+
After receiving a data packet, the user puts the information of the chatroom into
a list, while adding the data name into the interest's exclude
filter and resend the interest. And he will receive more data
packets with more chatrooms' information. When the interest expired
which means that there is no other chatrooms, the list of chatrooms
is completely generated.
After a specific time(discovery time), the discovery process will
start again. Discovery time can be set as a default time(e.g. 10
minutes) or set by the user.
Refreshing
+++++++++++++
To check the existence of an old chatroom, the user sends an interest
with the name:
``/ndn/broadcast/chronochat/chatroom-list/chatroom-name``
and with MustBeFresh selector to be true which is used querying for
sync data. If a participant of the certain chatroom receives the
interest, he will send a data packet with the chatroom's
information. Otherwise, if the chatroom
no longer exists, there is no data packet sent back. Therefore, if
receiving a data packet, it means that the specific chatroom still
exists. If the interest expires, the chatroom no longer exists.
Security Consideration
~~~~~~~~~~~~~~~~~~~~~~~
In the design above, it is very hard for the user to identify if the
information he received is true. Therefore, although the data
packet can be verified by hierarchical trust model or web of trust,
it can only verify that the data is the person from whom the user
intends to receive. If the data-sending-person intends to send some
fake content in the data packet, there is no way the user can tell if
the content is correct or not. Therefore, an attacker can attack the
design by sending a great number of fake chatroom information to the
network which may cause waste in traffic and even prevent a user to
receive real chatrooms' information. However, there are not many people
having the motivation to do the attack. Therefore, some assumptions
are made below.
For every chatroom, it is assumed that every participant of a
chatroom will not intend to send fake information to other users.
Under this assumption, all the data can be verified by the public key
generated according to the corresponding trust model and the security can
be guaranteed in this level.
Chatroom Discovery Protocol
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ **Timing**
Two duration need to be defined when maintaining the list of
chatroom:
- **Refreshing time:** For every chatroom there is a refreshing time
which measures the frequency of checking the existence. The
refreshing time can be defined in the data packet as FreshnessPeriod
and after the time expired, the user will send a new interest to
check the existence of the specific chatroom. And finally, the
chatroom list changes according to the query result.
- **Discovery time:** Discovery time is defined by the user. When
the timer expired, the user sends an interest to query for new
chatrooms.
+ **Chatroom List Data Structure**
For every chatroom:
::
enum TrustModel { TRUST_MODEL_HIERARCHICAL, TRUST_MODEL_WEBOFTRUST };
struct Chatroom
{
str::string name;
vector<Name> participants;
TrustModel trustModel;
vector<Name> contacts;
};
The whole chatroom list:
::
typedef vector<Chatroom> chatroomList;