forgejo/modules/setting
Gusted 12f97ef51f
[SEC] Add keying module
The keying modules tries to solve two problems, the lack of key
separation and the lack of AEAD being used for encryption. The currently
used `secrets` doesn't provide this and is hard to adjust to provide
this functionality.

For encryption, the additional data is now a parameter that can be used,
as the underlying primitive is an AEAD constructions. This allows for
context binding to happen and can be seen as defense-in-depth; it
ensures that if a value X is encrypted for context Y (e.g. ID=3,
Column="private_key") it will only decrypt if that context Y is also
given in the Decrypt function. This makes confused deputy attack harder
to exploit.[^1]

For key separation, HKDF is used to derives subkeys from some IKM, which
is the value of the `[service].SECRET_KEY` config setting. The context
for subkeys are hardcoded, any variable should be shuffled into the the
additional data parameter when encrypting.

[^1]: This is still possible, because the used AEAD construction is not
key-comitting. For Forgejo's current use-case this risk is negligible,
because the subkeys aren't known to a malicious user (which is required
for such attack), unless they also have access to the IKM (at which
point you can assume the whole system is compromised). See
https://scottarc.blog/2022/10/17/lucid-multi-key-deputies-require-commitment/
2024-08-21 16:06:17 +02:00
..
config
actions.go fix: enable LOG_COMPRESSION by default 2024-08-13 09:05:50 +02:00
actions_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
admin.go
admin_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api.go
asset_dynamic.go
asset_static.go
attachment.go
attachment_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
badges.go
cache.go
camo.go
config.go
config_env.go
config_env_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
config_provider.go
config_provider_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
cors.go
cron.go
cron_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
database.go
database_sqlite.go
database_test.go
f3.go
federation.go activitypub: Sign the Host header too 2024-08-04 23:57:48 +02:00
forgejo_storage_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
git.go git-grep: set timeout to 2s by default and allow configuring it 2024-08-14 07:55:05 +02:00
git_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
highlight.go
i18n.go
incoming_email.go
incoming_email_test.go
indexer.go
indexer_test.go
lfs.go
lfs_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
log.go log: journald integration (#2869) 2024-08-09 07:49:13 +00:00
log_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
mailer.go
mailer_test.go
markup.go
metrics.go
migrations.go
mime_type_map.go
mirror.go
oauth2.go OAuth2 provider: support for granular scopes 2024-08-09 14:58:15 +02:00
oauth2_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
other.go
packages.go Arch packages implementation (#4785) 2024-08-04 06:16:29 +00:00
packages_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
path.go
path_test.go
picture.go
project.go
proxy.go
queue.go
quota.go feat(quota): Humble beginnings of a quota engine 2024-08-02 11:10:34 +02:00
repository.go
repository_archive.go
repository_archive_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
security.go [SEC] Add keying module 2024-08-21 16:06:17 +02:00
server.go
server_test.go
service.go
service_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
session.go
setting.go log: journald integration (#2869) 2024-08-09 07:49:13 +00:00
setting_test.go
ssh.go
storage.go
storage_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
task.go
time.go
ui.go
webhook.go