| ![[The University of Leicester]](http://www.le.ac.uk/corporateid/departmentresource/000066/unilogo.gif) |           Department of Mathematics & Computer Science         | 
|  | 
 Next: About this document ...
 Up: Level 3
 Previous: CO3096 Compression Methods for Multimedia
 
CO3097 Programming Secure and Distributed Systems
| Credits: 20 | Convenor: Dr N. Ghani | Semester: 1 | 
| Prerequisites: | essential: CO1003,CO1004,CO1011 | desirable: CO2006,CO3007 | 
| Assessment: | Continual assessment: 40% | Three hour exam in January: 60% | 
| Lectures: | 36 | Problem Classes: | none | 
| Tutorials: | none | Private Study: | 90 | 
| Labs: | 12 | Seminars: | none | 
| Project: | none | Other: | none | 
| Surgeries: | 12 | Total: | 150 | 
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:
- 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
    cost savings.
  
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.
 
Aims
  The aim of this course is to equip students with the knowledge
  required to build secure and distributed applications in Java.  This
  will involve theoretical material concerning the fundamental
  problems, and possible solutions, that distributed applications face
  with particular attention being paid to the issues arising from
  concurrency and security. In addition, this will be complemented and
  reinforced by more practical material describing how these ideas are
  implemented in Java.
 
Objectives
- To build simple distributed applications using Java's 
  networking and remote method invocation capabilities.
- To build concurrent distributed applications using multiple threads.
- To build distributed applications with security enhancements
  using Java's security and cryptographic extensions.
 
Transferable Skills
- To understand the limitations of the basic model of computation
  as provided in elementary programming courses and the consequent
  development of more sophisticated programming paradigms such as
  distributed, concurrent, and secure programming.
- To use the theoretical perspectives offered by this module to
  implement distributed applications in other programming languages.
- To further develop the design and implementational skills as
  taught during the degree.
- Students who master the material offered will be prepared not
  only to write distributed applications or to read the research
  literature, but also to evaluate systems, algorithms and languages
  from a broad perspective.
 
Syllabus
- 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
Essential:
J. Farley, 
Java Distributed Computing, 
O'Reilly. 1998..
M. Boger, 
Java in Distributed Systems, 
Wiley. 2001..
J. Knudsen, 
Java Cryptography, 
O'Reilly. 1998..
Recommended:
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 Priciples and
    Patterns, 
Addison-Wesley. 1997..
Background:
 
Details of Assessment
  The coursework for the continual assessment consists of four
  worksheets containing problems that test the ability to understand,
  analyse and write distributed applications, as well as the
  conceptual aspects of the course.
The written May/June examination contains six questions, and
  candidates can obtain full marks from four questions.
 
 Next: About this document ...
 Up: Level 3
 Previous: CO3096 Compression Methods for Multimedia
Author: S. J. Ambler, tel: +44 (0)116 252 3884
Last updated: 2002-07-11
MCS Web Maintainer
  This document has been approved by the Head of Department.
© University of Leicester.