4 Mar 2026 05:12:31 FloofyWolf <[email protected]>:

Recently, a proposal has been made to implement an API for a new California censorship regulation, “On the unfortunate need for an "age verification" API for legal compliance reasons in some U.S. states” by Aaron Rainbolt.  I believe the approach outlined to be very short-sighted, in that creating a bespoke API for each of the hundreds of government censorship requirements that debian will presumably now be following will result in much duplication of effort and an unreliable user experience in which important censorship restrictions may be missed and not implemented.  As such, with people now supporting the idea that debian should implement government censorship requests, even creating new standards if needed, I propose the creation of a censorship framework to speed implementation of current and future censorship regulations.

On installation, the user will be required to enter their location. This information may be pre-filled if device location (GPS) or other sources of location data (IP geolocation, selected timezone, etc) are available.  If the user enters a location that does not match any gathered location data, this will be immediately stored and sent to authorities in both the detected location and the entered location to alert them of a citizen potentially trying to evade censorship regulations.  If the location entered requires further information, such as whether an encryption license has been acquired, the user’s age, etc, it will be requested at this point.  This process will also be repeated every time a user account is created, and will require implementation in both graphic and text-based account management utilities, such as adduser.

This location and user data will be managed by a new daemon, systemd-censord, and stored in an encrypted form and otherwise protected so as not to be readable or modifiable by any user on the system.  To ensure privacy, great care must be taken to prevent a user from being able to access other users’ personal information, and to ensure compliance with censorship regulations, no user may be able to change their location in any fashion which bypasses dedicated utilities, which will perform the required location validation and discrepancy authority notice functions when the user requests to change their location, such as for moving house or travel.

Systemd units will be created for every desired censorship function, and will be started based on the user’s location.  For example, a unit for Kazakhstan will implement the government-required backdoor, a unit for China will implement keyword scans and web access blocks (more on this later), a unit for Florida will ban all packages with “trans” in the name (201 packages in current stable distribution), a unit for Oklahoma will ensure all educational software is compliant with the Christian Holy Bible, a unit for the entire United States will prevent installation of any program capable of decoding DVD or BluRay media, and a unit for California will provide the user’s age to all applications and all web sites from which applications may be downloaded.  As can be seen, multiple units may be started for a given location.

All communication will be over D-Bus, with each application proactively asking systemd-censord for permission to perform any operations which may foreseeably be restricted anywhere in the world.  A standardized list of permissions will need to be developed, as well as standard personal data fields, such as user age.  Blobs for the storage of media player keys and digital rights management content could also be added as additional functionality.

Since keyword scanning and web filtering are extremely common government interests, a dedicated daemon for this function should be created, with kernel hooks to allow inspection of all internal program structures as well as internet traffic.  This daemon can then be started with different filter configuration files for each systemd unit triggered by the user’s location.  To comply with book bans common in many US states, such as those restricting access to books on LGBTQ[[:alnum:]]* topics or having non-white characters, this module should also automatically search the filesystem for prohibited ebook files.

Many packages will need to be altered to include specific functionality relevant to censorship, including dpkg.  For example, installing tor will be prohibited in many countries, and some packages, like fortunes-off, will be restricted based on the user’s age, as will most games.  Web browsers will have to be patched to send the user’s age to all websites hosting applications for download.  Encryption packages will have to check if a systemd unit limiting encryption strength is running, and set their maximum key length, disable features, or send private keys to a specified IP address determined by the unit.

To prevent users from bypassing censorship requirements, debian will need to switch to being a binary-only distribution with signed binaries, signed kernel, and signed kernel modules, with mandatory secureboot, and controls to prevent any non-signed software from being installed, written, or compiled, as any foreign sources of software may fail to query systemd-censord or may fail to respect the permissions it returns.

On the non-software side, the debian licenses will need to be modified to disallow removal or alteration of any of these features by derivative distributions – for example, no distribution will be allowed to ship without systemd because then systemd-censord may not work correctly.  In addition, the licenses for all packaged software will need to be amended to disallow removal of censorship functionality.

As I’m sure is obvious, if debian is going to comply with government censorship regulations, a universal framework allowing easy addition of new rules will greatly reduce developer time over individual ad-hoc implementations of each new freedom restriction.  Complying with only one regulation, such as California’s attempts to prevent minors from accessing unapproved information, makes no sense when there’s hundreds or thousands of other regulations not currently being complied with. This framework should ensure all users get to experience their full censorship regime no matter where they are in the world.

Thanks for reading, and I hope we can work together to help Linux implement as much censorship as possible!
--Floofy Wolf

Nice work!

I would agree with encrypting systemd-censord, but *how* to decrypt it, I have an idea for. It requires /etc/machine-id, AppArmor or SELinux, FDE, and a new *specially* compiled kernel module. Feel free to critique it and give me new ideas.

Starting off, /etc/machine-id is generated upon new installations with systemd-firstboot, and it is unique to all systems. This means it can be used as a shared key along with a unique salt to prevent rainbow table attacks. This would be pretty bad for anyone to see publicly, so now we have to come up with a solution.

My solution to this is FDE with TPM2, a kernel module, and an MAC. Firstly, all systems must have FDE with TPM2 from hereon. Any system that hasn't had it before is now an unsupported configuration. Secondly, the new kernel module is included in the initramfs so that it can start reading /etc/machine-id after root is mounted, but before any MAC can do anything to prevent it from being seen. Finally, the kernel module decrypts systemd-censord using the machine-id and salt, runs it, and encrypts it again. For good measure, AppArmor or SELinux would hide systemd-censord and the kernel modules.

This is not fully concrete, but I believe this is a starting point. I am fully open to other ideas.

Cheers,

--
Artur Manuel
amadaluzia
--
_______________________________________________
devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/[email protected]
Do not reply to spam, report it: 
https://forge.fedoraproject.org/infra/tickets/issues/new

Reply via email to