linux-mainline/fs/ubifs
Sascha Hauer 6a98bc4614 ubifs: Add authentication nodes to journal
Nodes that are written to flash can only be authenticated through the
index after the next commit. When a journal replay is necessary the
nodes are not yet referenced by the index and thus can't be
authenticated.

This patch overcomes this situation by creating a hash over all nodes
beginning from the commit start node over the reference node(s) and
the buds themselves. From
time to time we insert authentication nodes. Authentication nodes
contain a HMAC from the current hash state, so that they can be
used to authenticate a journal replay up to the point where the
authentication node is. The hash is continued afterwards
so that theoretically we would only have to check the HMAC of
the last authentication node we find.

Overall we get this picture:

,,,,,,,,
,......,...........................................
,. CS  ,               hash1.----.           hash2.----.
,.  |  ,                    .    |hmac            .    |hmac
,.  v  ,                    .    v                .    v
,.REF#0,-> bud -> bud -> bud.-> auth -> bud -> bud.-> auth ...
,..|...,...........................................
,  |   ,
,  |   ,,,,,,,,,,,,,,,
.  |            hash3,----.
,  |                 ,    |hmac
,  v                 ,    v
, REF#1 -> bud -> bud,-> auth ...
,,,|,,,,,,,,,,,,,,,,,,
   v
  REF#2 -> ...
   |
   V
  ...

Note how hash3 covers CS, REF#0 and REF#1 so that it is not possible to
exchange or skip any reference nodes. Unlike the picture suggests the
auth nodes themselves are not hashed.

With this it is possible for an offline attacker to cut each journal
head or to drop the last reference node(s), but not to skip any journal
heads or to reorder any operations.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Richard Weinberger <richard@nod.at>
2018-10-23 13:48:39 +02:00
..
auth.c ubifs: Add helper functions for authentication support 2018-10-23 13:48:33 +02:00
budget.c ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
commit.c ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
compress.c
crypto.c ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
debug.c ubifs: Format changes for authentication support 2018-10-23 13:48:29 +02:00
debug.h ubifs: Rework ubifs_assert() 2018-08-15 00:25:21 +02:00
dir.c ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
file.c ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
find.c ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
gc.c ubifs: Add authentication nodes to journal 2018-10-23 13:48:39 +02:00
io.c ubifs: Create functions to embed a HMAC in a node 2018-10-23 13:48:37 +02:00
ioctl.c
journal.c ubifs: Add authentication nodes to journal 2018-10-23 13:48:39 +02:00
Kconfig ubifs: Add helper functions for authentication support 2018-10-23 13:48:33 +02:00
key.h ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
log.c ubifs: Add authentication nodes to journal 2018-10-23 13:48:39 +02:00
lprops.c ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
lpt_commit.c ubifs: Export pnode_lookup as ubifs_pnode_lookup 2018-10-23 13:48:17 +02:00
lpt.c ubifs: Implement ubifs_lpt_lookup using ubifs_pnode_lookup 2018-10-23 13:48:21 +02:00
Makefile ubifs: Add helper functions for authentication support 2018-10-23 13:48:33 +02:00
master.c ubifs: authentication: Add hashes to index nodes 2018-10-23 13:48:39 +02:00
misc.c ubifs: Allow setting assert action as mount parameter 2018-08-15 00:25:21 +02:00
misc.h ubifs: authentication: Add hashes to index nodes 2018-10-23 13:48:39 +02:00
orphan.c ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
recovery.c ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
replay.c ubifs: Add authentication nodes to journal 2018-10-23 13:48:39 +02:00
sb.c ubifs: Store read superblock node 2018-10-23 13:48:29 +02:00
scan.c ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
shrinker.c ubifs: Pass struct ubifs_info to ubifs_assert() 2018-08-15 00:25:21 +02:00
super.c ubifs: Add authentication nodes to journal 2018-10-23 13:48:39 +02:00
tnc_commit.c ubifs: authentication: Add hashes to index nodes 2018-10-23 13:48:39 +02:00
tnc_misc.c ubifs: authentication: Add hashes to index nodes 2018-10-23 13:48:39 +02:00
tnc.c ubifs: authentication: Add hashes to index nodes 2018-10-23 13:48:39 +02:00
ubifs-media.h ubifs: Format changes for authentication support 2018-10-23 13:48:29 +02:00
ubifs.h ubifs: Add authentication nodes to journal 2018-10-23 13:48:39 +02:00
xattr.c Revert "ubifs: xattr: Don't operate on deleted inodes" 2018-09-20 21:37:41 +02:00