CO7097 Programming Secure and Distributed Systems
||Convenor: Dr. N. Ghani
||essential: none for MSc SEEE students.
||Three hour exam in January: 60%
This course will equip students with the knowledge required to
build secure and distributed applications in Java. The course
covers both the fundamental problems facing distributed
applications such as concurrency and security and more practical
material describing how these problems can be tackled and
implemented in Java.
Students will be able to: build simple distributed applications
using Java's networking and remote method invocation capabilities;
build concurrent distributed applications using multiple threads;
build distributed applications with security enhancements using
Java's security and cryptographic extensions.
Class sessions together with lecture slides, recommended textbook,
worksheets, printed solutions, and some additional hand-outs and
Marked coursework, traditional written examination.
To teach students how to methodically solve problems given the
techniques available to them.
Students will be able to: breakdown a problem to identify
essential elements; apply prior knowledge of subject to analyse
problems; design a plan to solve a problem; implement a planned
solution and evaluate the implementation.
Class sessions together with worksheets.
Marked coursework, traditional written
Explanation of Pre-requisites
A significant aspect of the module will be the reinforcement of
material delivered in lectures with practicals involving students
implementing distributed systems in Java. Hence a basic knowledge of
Java, as provided in CO1003 and CO1004, will be essential. A basic
grounding in discrete mathematics will assumed during the lectures
Although not essential, software design as found in CO2006 will aid
the design of distributed systems while the close relationship
between distributed computing and concurrency means that knowledge
of CO3007 will also be of benefit.
The internet has caused a revolution in the way we use and think
about computers. One of the key technologies underlying the internet
is distributed computing which allows individual computing
agents to be located, or distributed, on a network of
computers but nevertheless work together on cooperative tasks.
There are many motivations for distributing applications including:
- Inherent Parallelism: In distributed systems, many
computers can work together at the solution of a problem
simultaneously. Although this can be done using parallel
computers, it is often cheaper to distribute applications over
cheaper networks of PCs.
- Inherent Distribution: In many applications,
distribution arises naturally. For example, in a traffic control
system, data may be gathered at different measuring facilities,
analysed at a central location and, depending upon the results of
this analysis, commands sent back to improve the flow of traffic.
- Scalability: Distributed systems are easier to scale
than centralised systems. For example, increasing computing power
of a centralised system to cope with increasing demand is usually
much more expensive than increasing the number of computer nodes
in a distributed system.
- Data Access: It is often difficult and expensive to move
large data sets between different locations. Instead, it can be
more efficient to store data in locally and allow other users to
remote access using a data server.
- Resource Sharing: In distributed systems, expensive
resources such as printers can be used by devices distributed
across a network. Again, this sharing can produce significant
The development and programming of distributed systems is
considerably more complex than that of local applications.
Distributed applications usually run on spatially separated
computers, consist of different components which need to communicate
with each other and must ensure a consistent management of shared
resources. In addition, of increasing importance is the issue of
security in distributed systems, eg how can a component of a system
communicate with another component in such away that malicious
eavesdroppers cannot interfere. This course will introduce these and
other fundamental problems in distributed computing, explain some of
the solutions available and cover their implementation in the Java
programming language. Students will thus gain insight into
distributed computing and security as well as practical skills of
Distributed Programming: Networking in Java using sockets and
streams, multi-threaded computation, liveness, safety, deadlock,
livelock, mutual exclusion, communication protocols, semaphores and
monitors, synchronous and asynchronous message passing in Java,
Security: Security issues and concerns. Key management
including generation, translation, agreement protocols and
management paradigms. Authentication including message digests,
MAC's, signatures, certificates. Symmetric and antisymmetric
ciphers, eg DES, IDEA, RSA.
Java Support: Java security, Java Cryptography
Architecture (JCA), Java Cryptography Extension (JCE), Java remote
method invocation (RMI).
Java Distributed Computing,
Java in Distributed Systems,
Java Distributed Computing,
Concurrent Programming, The Java Programming Language,
Concurrent Programming in Java: Design Principles and
Lecture slides, web page, study guide, worksheets, handouts, lecture
rooms with two OHPs, past examination papers.
Course questionnaires, course review.
Author: N. Rahman, tel: +44 (0)116 252 2593
Last updated: 2004-01-20
MCS Web Maintainer
This document has been approved by the Head of Department.
© University of Leicester.