Information Security
01
Instructor · Course Overview · Security Properties · Threats & Attacks · Defence in Depth · Course Policies
Fall 2026 ·
Amirkabir University of Technology
@1995parham
9 years building backend systems
4 of them on platform and infrastructure

Before any mechanism, name the property. Almost every requirement in this course is one of three.
| Confidentiality | Only those authorized can read it |
| Integrity | Only those authorized can change it — and you can tell |
| Availability | Those authorized can actually use it, when they need to |
The CIA triad. Every control we meet serves one of them.
A university grade database:
Which is worst? It depends on the system — and deciding that is called risk management (lecture 2).
FIPS 199 defines confidentiality, integrity and availability; authenticity and accountability are added by NIST SP 800-33.
A hash function turns any input into a short fingerprint, the digest:
$ cat order.txt
transfer 100 USD to alice
$ shasum -a 256 order.txt
918e1e440fd83a713e79f2bcfcdecedb1145a7e94dba18ae71c9a9f886a7bb26 order.txt
$ sed -i '' s/100/900/ order.txt # change one character
$ shasum -a 256 order.txt
73d418b01e29a3ec522895c90d805794864d516a5603644e426adbd21a3111d9 order.txt
One digit moved, and every digit of the digest moved with it. That is what "you can tell" means.
Security is not a product, but a process. — Bruce Schneier, 2000
These five words are used interchangeably in the press. Not here.
| Asset | Something with value: data, a service, a reputation |
| Vulnerability | A weakness in the asset or its controls |
| Threat | A potential cause of harm — needs an actor and a motive |
| Attack | A threat that someone actually carried out |
| Risk | How likely, and how bad — the number we manage |
A vulnerability with no threat is a curiosity. A threat with no vulnerability is noise.
The oldest useful split. Lecture 2's standard, X.800, uses exactly these names:
Passive changes nothing, so there is nothing to notice: you prevent it. Active you cannot always prevent: you detect it and recover.
$ openssl s_client -connect example.com:443 -servername example.com \
-msg </dev/null 2>&1 |
awk '/ClientHello/{p=1;next} /^[<>]/{p=0} p' | xxd -r -p |
xxd | grep -B1 -A1 example
00000080: 3c00 3500 2f01 0005 78ff 0100 0100 0000 <.5./...x.......
00000090: 0010 000e 0000 0b65 7861 6d70 6c65 2e63 .......example.c
000000a0: 6f6d 000b 0002 0100 000a 0012 0010 11ec om..............
The first packet of the connection, sent before any key exists. Every byte of the request that follows is encrypted; the name of the site is not, because the server must know which site you want before it can answer. Metadata is not a leftover — it is structural.
A threat model names who attacks and what they can spend. "A hacker" is not one.
| Opportunist | Automated scanning. Takes whatever is unpatched and reachable |
| Insider | Already authenticated, already inside. Hardest to stop |
| Organized crime | Ransomware, fraud. Follows the money and is patient |
| State actor | Buys unknown bugs (zero-days), attacks your suppliers, will not give up |
Defending against all four to the same standard is how budgets are wasted.
A checklist for "what could go wrong here", one letter per property:
| Spoofing | pretending to be someone | → authenticity |
| Tampering | changing data | → integrity |
| Repudiation | denying you did it | → non-repudiation |
| Information disclosure | reading what you should not | → confidentiality |
| Denial of service | taking it away | → availability |
| Elevation of privilege | becoming admin | → authorization (who may do what) |
Draw how data moves through the system, and ask all six wherever it crosses from one owner to another.
Assume the outer layer is already broken. What does the next one do?
| Physical | Locks, racks, guards. Console access beats every other control |
| Network | Zoning, firewalls, VPN, segmentation — lecture 7 |
| Host | Hardening, patching, anti-malware, host IDS — lecture 5 |
| Application | Authentication — lecture 4. Input handling, sessions — lecture 6 |
| Data | Encryption at rest and in transit, key management — lecture 3 |
| People | Training, policy, process. The layer that is always attacked |
Whatever the layer, a control does one of four jobs. A programme with only the first is not a programme.
Prevention is preferred, detection is mandatory, recovery is survival.
| Least privilege | every subject gets the rights it needs, and no more |
| Fail-safe defaults | deny unless explicitly allowed — default deny |
| Economy of mechanism | a simple design is one you can actually check |
| Complete mediation | check every access, not just the first |
| Open design | security must not depend on the design being secret |
| Separation of privilege | two keys are better than one |
| Least common mechanism | every part users share is a path between them |
| Psychological acceptability | if the secure way is hard, people take the other way |
Saltzer and Schroeder, 1975. They have not needed revising.
Everything in this lecture, on one program. A grade service with a single endpoint; who the caller is comes from the login layer in front of it, and today we trust that header.
var grades = map[string]int{"4001": 12, "4002": 17}
func setGrade(w http.ResponseWriter, r *http.Request) {
user := r.Header.Get("X-User") // filled in by the login layer in front
if user == "" {
http.Error(w, "login first", http.StatusUnauthorized)
return
}
id := r.FormValue("id")
grade, _ := strconv.Atoi(r.FormValue("grade"))
grades[id] = grade
log.Printf("grade %s=%d by %s", id, grade, user)
fmt.Fprintf(w, "%s is now %d\n", id, grade)
}
$ curl -H 'X-User: parham' -d 'id=4002&grade=18' localhost:8080/grade
4002 is now 18
$ curl -H 'X-User: 4001' -d 'id=4001&grade=20' localhost:8080/grade
4001 is now 20
$ tail -1 server.log
2026/10/06 01:01:23 grade 4001=20 by 4001
if: it
asks "are you logged in?", never "are you allowed to set grades?"
var roles = map[string]string{"parham": "instructor", "4001": "student"}
if roles[user] != "instructor" {
log.Printf("DENIED grade %s=%d by %s", id, grade, user)
http.Error(w, "forbidden", http.StatusForbidden)
return
}
$ curl -H 'X-User: 4001' -d 'id=4001&grade=20' localhost:8080/grade
forbidden
$ head -1 server.log
2026/10/06 01:01:25 DENIED grade 4001=20 by 4001
Lectures 1–2 build the vocabulary, 3–4 the tools, 5–7 spend them on real systems.
| 35% | Midterm exam |
| 35% | Final exam |
| 30% | Homework and hands-on assignments |
Only ever attack a system you own, or one whose owner has given you written permission.
The subject of this course is trust. It would be strange to start by breaking it.
Next: lecture 2 turns this vocabulary into a standard one — X.800 — then writes it down as policy, prices it with risk management, and plans for the day it goes wrong.
Name the property. Name the threat. Then pick the mechanism.
