On the importance of having adversaries

The way I see it, there are two kinds of systems, and two kinds of adversaries.

The first kind of system is uninteresting: it’s a dead system. A dead system is a system that doesn’t self-repair, or doesn’t have someone repairing it. It doesn’t grow, doesn’t develop, it simply exists. An example of a dead system would be a bridge or a building: in and of itself, there’s no self-preservation, no self-healing.

On the other side of the coin, there are living systems. A living system is one that self-heals, self-maintains, learns and grows and adapts. A good example of this would be the municipal transit organization that maintains the streets, or a building complete with its occupants and maintenance staff.

If something attacks a dead system, the dead system is weakened. Someone takes a chisel to a bridge and chips a small chunk out of it, the bridge’s strength is reduced by the strength that the removed chip provided. Even the slightest wear and tear builds up over time, causing the eventual, inevitable failure of the system. The bridge will erode away, a grain of sand at a time, until it collapses. There is only one type of adversary to a dead system: a fatal one. This is somewhat uninteresting — a study in mutability, and nothing more.

If something attacks a living system, however, there are more possible outcomes. An attacker can either kill a living system, or it can strengthen it. In other words: there are two types of adversaries to a living system: fatal and nonfatal ones.

A fatal adversary will kill the system outright. It will attack, finding the weak points and exploiting them to deal a killing blow, causing the living system both to become a dead system, and to cease to function all in one shot. This kind of adversary, too, is somewhat uninteresting.

The interesting part of this dicussion, however, is the concept of a nonfatal adversary. In the context of a system, a nonfatal adversary (ie: one that doesn’t succeed in instantly destroying functionality), while temporarily weakening a system, will ultimately strengthen it. “That which does not kill me serves to make me stronger” (Nietzsche) as it were.

While Nietzsche’s statement is full of holes (ie: there are things that can fail to kill you but render you weaker, or helpless altogether), we can rationalize the assertion from a systems perspective with the idea that a system only gets weaker if it fails to repair itself sufficiently, and if it fails to repair itself then it had already become a dead system through some means or another anyway. This is something of a hand-waving justification, but it still serves the purpose, so let’s continue.

What constitutes a living system? As I said, the ability to self-repair, and to adapt. The mandate, even: survive by any means, adapt to best survive.

How does any of this matter? Well, think about living systems beyond the scope of biology. We can apply the living systems model to both epistemology, particularly science and philosophy.

In the realm of science, the scientist’s role is to observe a phenomenon, formulate a hypothesis, and then attempt to prove or disprove the hypothesis based on controlled experimentation with the phenomenon. In other words, the scientist’s role is to play his own adversary — he creates a theoretical framework, and plays both attacker and defender. A rigorous scientist will walk into an experiment with a theory about how something will work, but not with a conclusion, and will design an experiment to test it. If the experiment confirms the theory, then he will attempt to find the flaws in the experiment: is it properly controlled? Are there any confounds? Are there logical flaws in my framework? Is my own bias interfering with my result?

Some of the scientist’s tasks are very difficult to do from his own perspective. Things like detecting observer bias, for one. This is where the community comes in. When the scientist’s ability to be his own adversary reaches his limits, the community must step in and vigorously assault his framework in an attempt to tear it down. If they succeed, then the framework was incomplete, and the scientist can rebuild the idea and a new experiment to test it, based on what his adversaries demonstrated. If they fail, then he submits it to a larger body of peers for the same purpose.

In and of itself, this is just an adversarial perspective on the scientific method. But this also applies to the rest of academia. With a unanimous agreement on a subject, with no dissent, no willingness to vigorously attack a subject, the subjects being defended remain ultimately weak.

In the world of debate, experienced debaters know that the role of adversary is an invaluable tool. By taking the role of an adversary vigorously and wholeheartedly, a defender of an idea can examine the counterarguments to his arguments, and prepare counters for those, and then find counters for his counters, and in so doing refine his understanding of the topic both in breadth and depth.

In philosophy, the platonic style of dialogue attempts to simulate this, but ultimately fails because the victims of Plato’s representation of Socrates invariably fall into a mode of strict concession, virtually never raising a good counter-argument. So rather than having a dialectic approach, such false dialogues are ultimately just reflections of one side of a view.

In the judicial process, it is fairly commonplace for appellate judges to produce both a majority opinion and a dissenting opinion. Henry David Thoreau wrote an essay entitled “Civil Disobedience” on the same topic: if you disagree with something, you should express your dissent rather than remaining silent and tacitly consenting. Stephen Carter (a Yale law professor) wrote a book entitled “The Dissent of the Governed” — playing on the Declaration of Independence’s statement of governmental power coming from the consent of the governed. The thrust of the book was that not only does a government require the consent of the goverened, but it must allow for dissenting opinions to thrive as well, or it degenerates into fascism.

I would go so far as to say that a system not only needs to accomodate emergent dissent, it also needs to actively encourage and even cultivate it. I base this assertion on my knowledge of the history of information security.

In the days of Caesar, people wrote messages back and forth, and sent them in plain text in scrolls. Sometimes messengers might open the scrolls and read them, or tamper with them, or just simply fail to deliver them and disappear into the countryside never to be found again. So Caesar, in his ostensibly justified distrust of messengers, developed “Caesar’s Cipher” — a simple shift-cipher that masked the actual message, rendering it unreadable. Caesar had few opponents who were determined and intelligent and had access to his messages to figure out the cipher, so simply clueing in his recipient to the algorithm over a secure channel (in person, for instance) to how to decode his messages allowed him to send messages via conventional means.

While it’s not really known exactly how effective Caesar’s Cipher was, it probably did the job, because of the absence of effective adversaries. However, anyone with the slightest modicum of determination and a strong basic literacy could probably have worked it out, given the time.

In World Wars 1 and 2, complex rotor-based mechanisms replaced substitution ciphers as military communications became both more interceptable and more sensitive. Why? Because the adversary could understand and break simple ciphers, so more complex ones had to be developed. Simply put, having an adversary break a few codes led to the development of stronger codes.

As time passed, the weaknesses in those were discovered, and modern ciphers based on mathematical operations were developed, and again, broken. And replaced with better ones.

The idea is, cryptography developed because of the relationship between a vigorous adversary and a vigorous defender — that is, the attacker achieved a temporary victory against the defender, but in exchange the defender gained a permanent increase in strength.

Even in systems programming, the same relationship applies — an attacker attacks, finds buffer overflows in a program, maybe writes a virus to exploit it and root some boxes. While the world is temporarily less safe for the existence of the virus, the flawed code is patched, and we’re one step closer to having a completely hardened system.

Even the mere presence of what you deem a worthwhile adversary can be motivation to do a better job. This would be best illustrated by an anecdote: when my old fansub group started subbing Naruto, we had what we felt was a worthy adversary: ToriyamaWorld. They were subbing it too, at a very high quality standard, with very reasonably fast speeds. When they were competing with us, we did a better job, because we had a tangible goal: trump them on both speed and quality. It’s arguable whether we met those goals, but we got a LOT of mileage out of the team for a solid 8 months or so just on the perception of a competitor. When they slowed down, we lost our favorite competitor, and our drive to compete, and ultimately our quality standards and pace both fell off a bit. Even if the adversary isn’t directly attacking you, the ability to present yourself with an image of an adversary can motivate you to produce something less vulnerable.

Finally, let’s look at games, particularly Chess and Go. You simply can’t get better at either game without having a worthwhile opponent to play. If I’m 15 stones stronger than you in go, even if I give you a big handicap, I’m still not going to get much from the game. You may or may not, depending on how I play, but I very likely won’t get anything but the entertainment value of teaching someone who might in a couple months become a worthwhile opponent. On the other hand, if you and I are at roughly the same level, we’ll play interesting, hard-fought games which we’ll both learn and benefit from.

My point in all of this is pretty simple. Unless an adversary is capable of utterly destroying a system outright (or the system is dead already anyway), his attacks are ultimately doing you a favor as a defender by making you address the weaknesses he’s attacking.

3 Responses to “On the importance of having adversaries”

  1. Joel Says:

    The types of flaws repaired in response to adversaries, however, only need repair because of the existence of adversaries. Were there no adversaries whatsoever, the sort of flaws they exploit would be irrelevant. In fact, corrections due to security often lessen performance (in the case of computing, encryption, passwords, DRM and security patching come to mind as unnecessary hindrances in an adversary-free universe).

  2. the Pat Says:

    Conflict theory works out well, since everything in nature uses it to advance. Yes there are unfortunate consequences, but when dealing with economics, etc., one need not be completely domineering.

    Personally, I find Neitszche’s philosophies worthwhile only when an entire system has endemic flaws and weaknesses. Then does his concepts of completely overthrowing a system and letting creators make things make sense. That’s why I like a representative democracy, since typically anything that’s truly a virus in the system is quickly killed off. Typically anyway …

    *wanders off onto tangential thought*

    Anyhoots. Good read, archlich. Whether it’s gradual improvements or stark overthrows, adversaries are a good thing, on the whole.

  3. complich8 Says:

    responding to Joel:

    I’m trying to take a wider stance than just infosec. Apply the same idea to philosophy or debate. I make an argument with inherent flaws, you can tear down parts of my argument. Your role as an adversary forces me to redesign, to answer the weaknesses inherent in the argument I make, and ultimately to stop making weak arguments. Arguments on the existence of free will notwithstanding, a world without philosophical adversaries would be nightmarish oppression — a revisitation of Orwell’s 1984, only after the redesign of language was complete and thought opposed to “correct” thinking became linguistically impossible.

    Strictly within the realm of computer security, you’re right — attackers make us waste our time defending, slow our communications, and generally give us a bad time. But the adversarial relationship is fundamental to both science and philosophy. Without the ability to take an adversarial role, we have no tools with which to check the validity of the things around us.

    I would go so far as to say that the adversarial relationship is the fundamental basis of rational thought.

    Finally, a system without adversaries will inevitably pick them up — something the computer world learned from Ken Thompson, if nobody else.