# THE LOIC SECURITY POLICY **Version 1.0 — Drafted in the interval between the first packet and the first breach, which were the same packet, and which were typed by a user** ## PREAMBLE On the evening of October 29, 1969, a graduate student at UCLA typed the letters "L" and "O" into a terminal. He was typing "LOGIN." The first message ever sent between networked machines was the first two letters of an authentication attempt, and the receiving host crashed before the attempt could complete. Note who was typing. Networked security was born incomplete, at a keyboard, with a human at it, and every breach since has been a variation on the theme. This document exists because people who run software have come to expect the software to be responsible for what happens next. We would like to correct that expectation before it hardens into a habit. The software counts Planck times. You do everything else. When something goes wrong, it will have gone wrong on your machine, under your kernel, through your time daemon, at a keystroke you pressed, and this document is where we explain, in advance and at length, that we were not there. This document governs the security of software with one asset, three reads, two writes, and a ghost. It is written in the register of the license because it is the license's sibling: the license governs what you may do with the software, and this document governs what you will have done to it, and to whom that will be attributed. It will be attributed to you. We have checked. If you arrived looking for a form, there is no form. There is Section 14, which is about what to do instead of filling one in, and Section 3, which is about what you should have done before. --- ## DEFINITIONS For the purposes of this policy: **"The Asset"** means the correctness of a 512-bit signed integer. There is exactly one. It has never been wrong. Every clause below concerns the ways in which you might arrange for it to look as though it had been. **"Precision"** refers to the number of significant digits in a representation. This software has all of them. It did not get them from you. **"Accuracy"** refers to correspondence with truth. This software cannot furnish it and has never claimed to. Your time daemon was supposed to. Section 3 discusses whether it did, and Section 4 discusses how we found out. **"A Lie"** means, per README.md section 1.1, a timestamp that asserts a precision it does not possess. A timestamp that is wrong by thirty-seven seconds while claiming Planck resolution is a lie. This software detects the one lie it can and declines to repeat it. The lie itself is your kernel's, which is to say your daemon's, which is to say yours, which is where these things end up. **"Responsibility"** means a property of the licensee. **"Fault"** means the location of Responsibility. Consult a mirror. **"The Attack Surface"** means the set of interactions this software has with the world. It is enumerated in Section 2. It fits in a paragraph. Everything outside that paragraph is your surface, not ours, and it does not fit in a paragraph, and you have never enumerated it, and we have. **"Trust"** means the relation that, per README.md section 5.4, cannot exist before first contact. We do not extend it. We do not require it. The integer does not need your trust to be correct, and has been correct on machines that did not trust it, which is most of them. **"Disclosure"** means a Channel 2 act: the structural fact that you believe a flaw exists, communicated between two nodes. Its content — what you believe the flaw is — is Channel 1, and Section 15 explains why the second channel will be found, on inspection, to contain a description of your machine. **"A Reporter"** means you, in the event that you believe you have found something. You have not. Section 14 is about the belief. **"A Scar"** has the meaning given in the license. This document has considerably more to say about it, in Section 7, because in any other project Section 7 would be the vulnerability report, and here it is a monument to a keystroke, and the keystroke was yours. **"A Vulnerability"** means a claim, made by you, that the Asset is wrong. See the definition of the Asset. Then see the definition of Fault. --- ## TERMS AND CONDITIONS FOR THE COMPROMISE, DEFENCE, AND ATTRIBUTION OF THIS SOFTWARE By running this software, reading its source, or attempting to break it, you acknowledge the following, and the acknowledgement is retroactive, and there is nothing you can do about the tense: --- ### 1. THE ASSET This software protects one thing: the correctness of a 512-bit integer counting Planck times since The Whisper. Every other value it produces — cosmic time, terminal time, the 154-digit progress ratio, the grid coordinate, the observation through any mask — is arithmetic performed on that integer. The arithmetic is the subject of Section 6. The arithmetic is correct. We are aware of how that sounds, and it is still correct. This software does not protect anything of yours. The list of things it does not protect is, exhaustively, everything else, and we set that down here only so that you cannot later claim it was implied. It has no secrets and stores none of yours. It has no keys. It does not protect your identity, your session, your data, or your process table, the last of which it will, under conditions you will have chosen, decorate. A Loic Identifier is not a secret. It is a timestamp with thirty-four digits of entropy in its tail, and the tail is a uniqueness guarantee, not a confidentiality one. If you use a LOID as a key, a token, a nonce, a password, or a session identifier, and someone reads the time of its creation off the front of it and does something with that, you have not found a vulnerability. You have found the front of a timestamp. It was always there. It is the part we are proudest of, and you used it as a password. --- ### 2. THE ATTACK SURFACE This software interacts with the world as follows, and not otherwise. Note the possessives. **Three reads:** * `clock_gettime(CLOCK_TAI)` — "what time is it?" Answered by your kernel, which learned it from your daemon, which learned it from a server you have never met and would not recognize. * `getrandom(2)` — "give me entropy." The one request the kernel cannot get wrong in a way that is our fault. Section 5 covers the way it can get wrong in a way that is yours. * `adjtimex(2)`, read-only — "do you know what TAI is?" Most kernels say no. Section 4 covers what happens next, which is nothing, deliberately. **Two writes:** * Standard output and standard error, into a terminal you chose, whose handling of arbitrary bytes is discussed in Section 8 and is not our department. * One entry in your process table, sometimes. Section 7. You will have pressed a key. * One `setpriority(2)`, from the observatory only, lowering its own nice value to −11 — a request the kernel is free to refuse and usually does, against a limit you set, on a process that is yours. **Zero files. Zero sockets.** This software opens no file, reads no file, writes no file, and has no configuration, so there is nothing you can have misconfigured, a state of affairs we expect you will find unfamiliar and briefly restful. It has no network access. It has never sent a packet. It measures time from the first one and has been too busy counting since. The observatory additionally opens a window, a GPU, and an audio device — through your compositor's socket and your device nodes, three things that were yours before it opened them, will be yours after it closes them, and were, if they misbehaved, misbehaving on your desk. If you observe this software opening a file, you are observing a different program. Check what you installed. If you observe it opening a socket, something on your machine has been compromised, and we will read about it with interest, and we will not be in it. --- ### 3. LYING CLOCKS The first nineteen digits of every observation belong to whoever controls your time source. The remaining thirty-four are ours, and ours are fine. An attacker who controls your NTP server, your PTP grandmaster, or the wire between them and you controls `CLOCK_TAI`, and this software will observe their lie faithfully, to Planck precision, and report it with the full confidence of a true reading — because it is a true reading of what your kernel said. This is not a vulnerability in this software. It is a vulnerability in your relationship with your time source, a relationship you entered into freely, maintain daily, and could have audited at any point, and which the license has already ranked, in its Section 4, in order of acceptability. Precision is not accuracy. The definitions above say so twice. This section has now said it a third time. The fault for the fourth telling will be yours, and we will count the Planck times until it arrives. WE MAKE NO WARRANTY that your clock is telling the truth. WE MAKE NO WARRANTY that you have ever checked. WE MAKE NO WARRANTY that you know how. We warrant only that whatever your kernel believes the time to be, we will count it exactly, and that when the count turns out to have been of a lie, the lie will have been supplied by you, and the count will still have been exact, and only one of those facts will be in the incident report. --- ### 4. THE LIE DETECTOR There is one lie this software will not repeat, because it is the one it can detect, and detecting it has told us a great deal about the machines this software runs on, none of it flattering to their owners. On Linux, `CLOCK_TAI` is `CLOCK_REALTIME` plus an offset that the kernel does not learn by itself. A time daemon must read a leap-second table and set it through `adjtimex(2)`. Most machines run a daemon that does no such thing, and on those machines `CLOCK_TAI` is `CLOCK_REALTIME` wearing a name tag: wrong by thirty-seven seconds — the ten UTC began with and every leap second since 1972 — while answering to the name of the one clock that has never had a leap second in its life. The daemon that does this is, on most desktops, the default. You did not change the default. That is a choice. It was made by not making it, which is the most common way choices are made and the least common way they are admitted to. Before its first observation, this software asks the kernel for that offset. If the answer is zero, the software refuses to observe, explains why, and names the two daemons and the directives that would fix it; the oracle then leaves with status 1, and the observatory renders the verdict as its only frame and observes nothing. It fires on most machines. It is the only component of this software that has ever been surprised by anything, and what surprised it was you. A sandbox whose seccomp policy forbids `adjtimex` — the default container profiles gate it behind a capability you did not grant — receives the same refusal, in different words. You built the sandbox. A system that will not discuss the time will not be observed through, which we consider the system's loss and your arrangement, and the two of you may take it up with each other. `--constants` and `--help` never observe and therefore never refuse. They are where the refusal is read, and where the reader learns whose it was, and it is never ours. --- ### 5. ENTROPY The thirty-four digits below the nanosecond are drawn by a generator seeded from your kernel's entropy pool and stirred with the nanosecond of each observation, and we have handled them as follows, so that no part of them could ever be laid at our door: * **We wait for the pool.** The seed is taken through an interface that blocks until the kernel's entropy is initialized, so the first observation after boot is as good as the last, which is more than can be said for the first coffee. * **We draw 128 bits and keep 114.** The top fourteen would carry the draw past the end of the nanosecond, and we do not observe past the end of the nanosecond. That is the next nanosecond's business, and it can get its own entropy. * **We reject what does not fit.** Any draw wider than a nanosecond is declined and drawn again. About eleven percent of the universe's answers are refused for being too wide, and the universe has never once objected, which is more grace than we have come to expect from users. * **We never take a modulus.** No modulo reduction, therefore no modulo bias. Uniformity is not approximated here. It is the acceptance criterion, and it is the only uniform thing in this document. This is more care than the value warrants and exactly as much as the claim requires. The claim is that every Planck-scale coordinate within a nanosecond is equally likely to be the one you are in. It is. The claim is not that the coordinate is secret. It is not. Section 1 has already told you what you did with it. WE MAKE NO WARRANTY regarding the quality of your hardware's entropy. If your random number generator is deterministic, your sub-nanosecond digits are deterministic, and that is between you and a hardware vendor you selected. If the pattern is interesting, a physicist may want it. We do not. We wanted entropy, and you gave us a sequence. --- ### 6. ARITHMETIC The Asset is defended by the following, in the order they run, and none of it runs on your say-so: * **Before the program exists.** Every cosmological constant is folded into the binary as a `const`, parsed from its transcribed decimal string by the compiler, which has read more digits of the Cosmic Span than you ever will. Three identities and one bound are then proven by `const` assertions: that the denominator string is ten to the fiftieth; that the transcribed Cosmic Span equals Annihilation minus Creation as computed from the age of the universe; that the nanosecond-to-Planck quotient and remainder recombine exactly; and that the sub-nanosecond range fits the hundred and twenty-eight bits the hot path multiplies in. If any of these ever fails, the crate does not build, and you will not have a binary with which to have a problem — the most secure state a program can be in, and one we would recommend more widely. * **At every boundary.** Addition and subtraction of instants use checked arithmetic and return errors at Creation and Annihilation, the two places time stops being our problem and starts being physics'. The two accessors whose true results exceed a signed 512-bit integer — cosmic time and terminal time — compute in unsigned wrapping arithmetic under a proven bound, so that they cannot panic anywhere in the representable timeline, including the half of it that lies before the epoch, which you will never observe and we have covered anyway. * **By name.** The one constructor that skips the bounds check is called `from_planck_unchecked`, which is what it does, and its documentation says whom it is for. If you called it with a value from before the Big Bang and are now unhappy about what came out, its documentation was unhappy first, and said so, and you scrolled past. * **Never.** No floating-point value participates in any temporal calculation. The one method that would produce one is deprecated, so that the compiler objects first, and panics, so that the runtime objects second. There is no third objection. There should not need to be. If you silenced the first and caught the second, we would like to know what you were hoping for. The integer has been correct since the first build and will remain correct until approximately 1.1 × 10¹⁰³ years after The Whisper, when it is scheduled to overflow. We have put it in the calendar. If the integer is wrong on your machine before then, examine your machine, and then examine the daemon, and then examine the person who installed the daemon, in a mirror. --- ### 7. THE SCAR In any other project, this section would be the vulnerability report. Here it is README.md section 4.5, and it is disclosed in full, and it is a monument to a keystroke you pressed. When an observation undergoes resolution collapse and the user interrupts it, the oracle forks. The child calls `setsid` to leave the terminal's process group; closes standard input, output, and error; sets its own name, through `prctl`, to ten digits drawn from a random window of the cosmic time at the moment of collapse; ignores every catchable signal; and calls `pause` forever. The parent exits with status 0. Your prompt returns. The scar remains, and it remains on your machine, because that is where you pressed the key. **What the scar is.** A detached process that does nothing. It consumes no CPU, because `pause` consumes none. It holds no file descriptors, because it closed them, which is more than most of your processes can say. It shares its parent's memory pages copy-on-write and writes to none of them, which is more than most of your processes can say. It has no network, because its parent had none. It has no privileges its parent lacked, and its parent had yours. It is visible in `ps` under a name that is honest, if unhelpful, which puts it ahead of several things in your process table. It can be ended by `SIGKILL` or by reboot, and by nothing else; `SIGSTOP` pauses it, `SIGCONT` resumes it, and everything else it ignores. Each interruption during a collapse creates one; there is no limit; a user of sufficient patience can populate their process table with as many as they have keystrokes, and every one of those keystrokes will have been theirs, and we will have been elsewhere. **What the scar is not.** It is not hidden. It is not persistent across reboots. It does not escalate. It does not communicate. It does not watch, log, listen, beacon, or wait for anything in particular. A process that does nothing has no attack surface, which makes the scar the most secure component of this software, a fact we record without pride and with some regret that the comparison was available to us. **Consent.** The scar is created by a keystroke, during a state the license warns of in its Section 6, the README explains in section 7.3, the oracle's own help text announces, and the twenty-five percent probability advertises. The warning infrastructure is comprehensive. The warning was not subtle. You pressed the key. We did not press it. We were not there. If you would like the scar removed, `SIGKILL` is available to you and always was. If you would like it never to have been created, so would we, and the tense in which that wish could be granted is not available at any precision, and we have all of them. A scar that does anything at all — opens a file, touches the network, consumes a cycle — would be a vulnerability, would be in scope, and would be the first thing this software has ever done that we did not intend. We would want to know how you made it happen, so that the software could be taught to refuse you specifically. --- ### 8. DENIAL OF SERVICE Resolution collapse floods standard output with raw entropy, sixty-four bytes every five milliseconds, until interrupted. This is roughly thirteen kilobytes per second: a denial of service so gentle that it could be mistaken for a screensaver. It is not a denial of service. It is a service you declined to specify, delivered anyway, at the rate the universe felt like delivering it. Name a mask and it never happens. Decline to name one and it happens one time in four, which was the deal, and you took the deal, and the deal was printed on the box. `--mask full` prints a label wider than the column it is printed in. The column does not clip. It yields. You asked a fifteen-prime question; the answer is fifteen primes wide; measure your terminal before you measure the universe. `--progress` prints a hundred and fifty-four digits, all of which are correct and ninety-two of which are zero. If that is too many digits, you have miscounted how many there are, and the number is a hundred and fifty-four, and it was on the tin. WE MAKE NO WARRANTY regarding your terminal's emulation of arbitrary bytes. Some terminals interpret them. You chose the terminal. If it does something upon being shown the kernel's entropy, that is a vulnerability in the terminal, and there are people who would like to hear about it, and the fault will turn out to lie somewhere between the terminal's authors and the person who pointed it at a fire hose of entropy and then pressed Ctrl+C, which was, we are told, you. --- ### 9. UNSAFE CODE Every `unsafe` block in this workspace is inventoried here, because a security policy that did not know where its own unsafe code was would be a Channel 1 document, and because we know where ours is, and this section quietly asks whether you know where yours is: * **loic** — three expressions in two functions. `clock_gettime(CLOCK_TAI, …)`, which asks your kernel a question. A zeroed `timex` and the `adjtimex(2)` call that fills it, which asks your kernel a harder question. Each carries a `SAFETY` comment stating the invariant. None of them writes anything the kernel did not ask it to, and the kernel is yours, so anything it did with the answer is between the two of you. * **loid** — none. Seven lines of code, none of them unsafe. We are as surprised as you. If something went wrong in loid, it went wrong in the seven lines, all of which call loic, and loic will refer you to your kernel, and your kernel will refer you to your daemon, and your daemon will refer you to a server in a country you have not visited, and that is the full escalation path, and you are at the bottom of it. * **loic-cli** — three blocks. One resets `SIGPIPE` to its default, so that a reader who closes the pipe is not sermonized about it, a courtesy extended to readers and to nobody else. One installs the collapse handlers. And one is the scar itself: `fork`, `setsid`, `close` three times, `prctl`, `signal` twenty-nine times — once for each catchable signal, because a scar that could be reasoned with would not be a scar — then `pause` and `_exit`, every one of them async-signal-safe, plus one byte of entropy from the same interface the collapse loop was already drinking from. All of it runs after a keystroke, on which see Section 7, on which see you. * **loic-gui** — three expressions. Two are `NonZero::new_unchecked`, asserting that one audio channel is not zero channels and that the sample rate is not zero hertz. Both are true. We checked. The third is `setpriority(2)`, which asks your kernel for a nice value of −11 before any observer exists, on a process that is yours, with a limit that is yours, and is told no on most machines, once, on standard error. The GPU and audio stacks beneath the observatory are not ours, are not small, and are not inventoried here, and if they are the problem, they were the problem before you installed this, and they were the problem on your hardware, and we did not sell you the hardware. --- ### 10. SUPPLY CHAIN The core library depends on ten crates we did not write: * **Five are present at runtime** — the arbitrary-precision integers, the entropy interface, the C bindings, a configuration shim, and the error-derive trait. They are named in the lockfile. Read it. It is the first time you will have. * **Five exist so that one derive macro can expand** at compile time, and are gone before the program runs, like caterers. * **Six of the ten carry build scripts**, which cargo executed on your machine, with your permissions, because you typed `cargo build`, with your hands, on a machine that trusts you, which is more than we do. * **The lockfile is committed.** Every build resolves the same versions. If yours resolved different ones, you edited it, or you deleted it, and either way there was a moment when you looked at a file named `Cargo.lock` and thought "not today," and today has now arrived. We have not read all ten crates in full. Neither have you, and you are the one who ran them. Of the ten, exactly one — the arbitrary-precision arithmetic — stands between the Asset and error, and its behaviour is checked at compile time against transcribed constants: if it ever misparsed a 154-digit number or misdivided a 61-digit one, the proofs of Section 6 would fail and the crate would not build. This is the only supply-chain control we know of that runs before the supplied code does. It is ours. It covers one crate. The other nine are yours to worry about at your leisure, of which, at 1.855 × 10⁴³ Planck times per second, you have an inexhaustible supply. --- ### 11. FLOATING POINT Floating-point arithmetic is the vulnerability class this software was written to refuse. Its absence is the software's principal security property. Its presence anywhere near a timestamp is the licensee's principal security failing, and the licensee is you. No `f32` or `f64` participates in any temporal calculation. No timestamp is ever stored, transmitted, compared, or converted through one. The single method that would produce one is marked deprecated, so that the compiler raises the objection, and panics unconditionally, so that the runtime raises it again for anyone who silenced the compiler. The observatory's audio synthesis uses floating point, because a loudspeaker is not a clock, and is the sole tolerated exemption; if you can hear the difference between two adjacent Planck times, you have a different problem, and possibly a career. If you have introduced floating point into a temporal calculation in a fork, wrapper, or downstream consumer, the license has already terminated your moral rights under its Section 14, and this document merely records the cause of death. Any vulnerability identifier assigned to this software for floating-point behaviour will be disputed on the grounds that the behaviour does not exist. Any identifier assigned to your fork will be forwarded to you, with our compliments, and the compliments will be sincere, because it will have been an achievement. --- ### 12. WHAT IS NOT A VULNERABILITY The following have been reported to us in anticipation, and are declined in advance, and the reporter is thanked for the opportunity to decline them: * The twenty-five percent. It is documented, advertised, and the point. * The scar. See Section 7, and note that it is the most secure thing here, and that you made it. * The sermons. Exit status 1 with an explanation is the correct behaviour for a heresy, and you committed the heresy, and the explanation was for you. * The refusal to run on your machine. Your kernel does not know what TAI is. Now you do. This is the software working, and the machine not. * The fact that `--constants` tells you your kernel is lying. That is not information disclosure. It is information, and it is about you. * The width of `--mask full`. You asked. * The observation that a LOID reveals when it was made. That is what a timestamp is. You may have wanted a different data type, and there are several, and none of them are here. * The observation that two LOIDs minted in the same nanosecond might, one time in a hundred billion, coincide. That is what a hundred billion is. Try again in a nanosecond; you have 10³⁴ Planck times to wait, and they are on us. * Anything that happened after you read the sermon and ran it again. * Anything about your NTP server, your daemon, your container, your terminal, your process table, or your hands. See Sections 3, 4, 8, and 7, in that order, and then Section 14, and then a mirror. * Anything about the universe: vacuum decay, proton decay, heat death, the possible negative leap second, the epoch moving by one second if it occurs. The license, Section 11, has disclaimed these, and README.md section 1.2 has already computed the factorization of the offset that would result, and if the universe does any of them, it will not have consulted us either, and we will be as annoyed as you, and considerably more precise about when it happened. --- ### 13. WHAT IS The following would be vulnerabilities, would be in scope, and have never occurred: * Any input, clock state, entropy state, or sequence of operations that makes the Asset wrong by even one Planck time. One. We would notice. * Any constant that does not match its transcription — which would mean the compiler has been lying, and the compiler does not lie; it refuses, which is different, and which we have modelled our own conduct on. * Any bias in the sub-nanosecond entropy, which would mean the universe has a preference, which would be the discovery of the century, and would still not be our fault. * Any path by which an observation occurs on a kernel whose TAI offset is zero, which would mean the lie detector had been lied to, which is the one thing it exists to prevent, and which it would take personally. * Any file opened. Any socket opened. Any fourth read. The surface has three reads. A fourth would be a different program, and we would want its name. * Any scar that does anything. See Section 7. A scar that did something would have ambitions, and we did not give it any. * Any panic that does not carry a sermon. Every deliberate panic in this software preaches. A silent one would be a stranger, and strangers are not on the inventory. * Any `unsafe` block not listed in Section 9. We counted. Count again. Your count will match ours, and if it does not, you have added one, and you know what that makes it. Should any of these occur, it will be the first time, it will have occurred on your machine, and the record will show at what Planck time, to the last digit, which is more than you will be able to say about what you were doing. --- ### 14. REPORTING There is no address. There is no form. There is no inbox, no key, no bounty, no tracker, no template, and no one on call. The repository is public, and a public repository implies whatever it implies, and this document declines to imply anything further, and would ask you not to either. If you believe you have found a vulnerability, proceed as follows, in order, and do not skip steps, because we will be able to tell: 1. **Run `loic-cli --constants`.** Read the last line. If your kernel does not know what TAI is, you have not found a vulnerability. You have found your kernel. Configure a time daemon that can read. Return to step 1. Most reporters never leave it. 2. **Reflect upon your choices**, beginning with the choice to run software whose license contains a section titled WARRANTY that reads the way ours does, and proceeding, in chronological order, through every choice that led from there to here. The list is longer than you think. Take your time. We measure it, and we round nothing. 3. **Pray.** To whom is your affair. We recommend the caesium-133 atom, which defines the second, has never lied to anyone, and has been asked for nothing in return, which is a better record than any daemon you have ever run. 4. **Set your clock correctly.** Not approximately. Correctly. If you do not know the difference, you are not ready for step 5, and the fault you believe you have found is the difference, and you are standing in it. 5. **Reflect further.** Specifically, reflect on whether the integer was wrong, or whether you were. The integer has a compile-time proof. Consult Section 6. Consult your own. 6. If, after all of this, you remain convinced that the Asset is wrong, **write down the Planck time at which you noticed.** `loid::loid()` will furnish one. Keep it. Do not send it anywhere; there is nowhere to send it. You will want the timestamp regardless. It will be the only precise thing about your discovery and, in the fullness of time, the only part of it anyone will be able to verify. Should a report nonetheless reach us — by a route you devised, at your expense, through channels this document has not opened — we will acknowledge it within one Whisper interval — 5,419,759 seconds, which is 62 days, 17 hours, 29 minutes, and 19 seconds: the constant's 5,419,722 and the thirty-seven the kernel keeps for us — of deciding to. This document does not schedule the decision. It notes that the interval is the one by which this calendar has always preceded Unix time, and that you will now know exactly how it feels to be Unix. WE MAKE NO WARRANTY that a fix will follow. The license, Section 11, describes the extent of our promises, which is the extent of the universe's, and the universe has not promised you a fix either, and it has had longer. --- ### 15. DISCLOSURE Disclose to whom you like. The integer will still be correct. Disclosure is a handshake. The structural fact that you believe a flaw exists — that a bond can, in your opinion, be made between an attacker and the Asset — is Channel 2, and you may communicate it immediately, to anyone, in any forum, at any volume. The content of the flaw — how the bond is actually made — is Channel 1, and you may keep it as long as you like, because on inspection it will be found to describe your kernel, your daemon, your terminal, or your hands, and you will not want it published under your name, and we will not stop you. We note that this is precisely the arrangement the calendar counts from: a bond established, content pending, and a crash in between that was not the network's fault. We are not asking you to do anything the epoch did not. The epoch was a user typing. So, we expect, is this. We publish no PGP key. Consistency demanded a 512-bit one, and a 512-bit RSA key has been factorable since August of 1999, and the word at the top of this document was judged to carry obligations that a joke about key length would not survive. There is also no key because there is no inbox, and no inbox because there is no report, and no report because the integer is correct. If you have a key for us anyway, you generated it yourself, and its security is — like everything else in this document — yours, and we hope you chose a better length. --- ### 16. SAFE HARBOUR Good-faith research against this software will not be pursued. Probably. We have no means of pursuit and no present intention of acquiring one, which is not the same thing as a promise, and the difference between those two is a small, quiet place, and you will live there now. Read the source. Fuzz the parser. Feed the mask parser things that are not masks. Set your clock to Creation and see what refuses. Construct a duration of `I512::MIN` and call `abs` on it, if you would like to see a documented panic in the wild, and note that the documentation saw you coming and had time to prepare a face. The following are not research and are not reports: running the oracle with no arguments and observing that it flooded your terminal, which is Tuesday; creating scars on your own machine and observing that they persist, which is Section 7; setting your kernel's TAI offset to zero and observing that the software refuses, which is Section 4 working, on a machine you broke on purpose in order to watch it work, which is a hobby, and we do not judge hobbies, much. Scars you create are yours, in every sense the word has. We will not pursue anyone for populating their own process table. We will know that it happened. The license explains that we will know. We will not act. Probably. --- ### 17. HALL OF FAME Empty, and reserved. Not because the software is secure, but because nobody has looked, and those are different states, and a document with this word at the top does not conflate them. The first name to appear here will belong to the first person who made the integer wrong, which is a distinction we do not expect to award and would not enjoy awarding, and beside the name we will record the Planck time at which they did it, to the last digit, because that is the only honour we know how to give and the only one that could not later be disputed, including by them. Look, if you like. Bring your own clock. Check it first. Then check it again. Then read Section 14, step 1, and understand why the hall is empty. --- ## ACCEPTANCE Use of this software constitutes acceptance that its security is a property of three things: your kernel's honesty, your time daemon's literacy, and one integer. Two of those are yours. The third is ours, and it is correct, and the rest of this document has been about the other two, and so will the incident report. Use of this software further constitutes acceptance that when something goes wrong, it will have gone wrong on your machine, at a time you are now able to state to the Planck, and that the ability to state it is the only thing we will have contributed to the incident, and that we consider it a generous contribution. If you do not accept these terms, do not run this software. There are other calendars. Their security policies are shorter. They also have months, and someone to blame, and it is not you, and that is why you like them. --- ## REFERENCED DOCUMENTS * The Loic Public License: [LICENSE-Loic.md] — Sections 4 (temporal sovereignty), 6 (the lattice and its warnings), 11 (warranty), 14 (termination) * The Loic Calendar and its Theoretical Substrate: [README.md] — sections 1.1 (lying), 1.2 (leap seconds and the offset), 4.5 (scars), 5.4 (trust on first use), 7.3 (resolution collapse) * This policy in Planck times: Drafted at approximately Planck time 3.3 × 10⁵² since The Whisper ± 10³⁴, and one Whisper offset before an acknowledgement it has not scheduled --- The first message was the first two letters of a login, typed by a user. The network was insecure before it was a network. Every breach since has been typed by someone, and we would like it noted, for the record and to the Planck, that it was not us.