CO3097 Programming Secure and Distributed Systems

CO3097 Programming Secure and Distributed Systems

Credits: 20 Convenor: Dr. N. Ghani Semester: 2

Prerequisites: essential: CO1003,CO1004,CO1011 desirable: CO2006,CO3007
Assessment: Coursework: 40% Three hour exam in June: 60%
Lectures: 36 Problem Classes: none
Tutorials: none Private Study: 78
Labs: 24 Seminars: none
Project: none Other: none
Surgeries: 12 Total: 150

Subject Knowledge


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.

Learning Outcomes

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 web support.


Marked coursework, traditional written examination.

Subject Skills


To teach students how to methodically solve problems given the techniques available to them.

Learning Outcomes

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 examination.

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 on security.

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.

Course Description

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:

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 immediate use.


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, client-server architectures.

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).

Reading list


J. Farley, Java Distributed Computing, O'Reilly. 1998..

M. Boger, Java in Distributed Systems, Wiley. 2001..

J. Knudsen, Java Cryptography, O'Reilly. 1998..


S. Oaks, Java Security, O'Reilly. 1999..

J. Farley, Java Distributed Computing, O'Reilly. 1998..

S. Hartley, Concurrent Programming, The Java Programming Language, OUP. 1998..

D. Lea, Concurrent Programming in Java: Design Principles and Patterns, Addison-Wesley. 1997..



Lecture slides, web page, study guide, worksheets, handouts, lecture rooms with two OHPs, past examination papers.

Module Evaluation

Course questionnaires, course review.

[University Home] [Faculty of Science] [MCS Home] [CS Home] CS Home Page [University Index A-Z] [University Search] [University Help]

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.