Funkcje boolowskie

Transkrypt

Funkcje boolowskie
Matematyka Dyskretna
Andrzej Szepietowski
25 czerwca 2002 roku
Rozdział 1
Funkcje boolowskie
1.1 Algebra Boole’a
Przykładem algebry Boole’a jest zbiór dwuelementowy:
z trzema operacjami: alternatywa̧, koniunkcja̧ i negacja̧.
Alternatywa, która̧ bȩdziemy też nazywać po prostu suma̧, jest operacja̧ dwuargumentowa̧,
oznaczana̧ przez:
lub
i określona̧ przez tabelȩ:
p
0
0
1
1
q
0
1
0
1
p+q
0
1
1
1
Koniunkcja (lub iloczyn) jest druga̧ operacja̧ dwuargumentowa̧, oznaczana̧ przez:
lub
i określona̧ przez tabelȩ:
p
0
0
1
1
q
0
1
0
1
3
0
0
0
1
4
Rozdział 1. Funkcje boolowskie
Podobnie jak w arytmetyce, kropkȩ bȩdziemy opuszczać, jeżeli nie bȩdzie to prowadzić
do niejednoznaczności.
Operacje alternatywy i koniunkcji można też zdefiniować za pomoca̧ nastȩpuja̧cych
wzorów:
Negacja jest operacja̧ jednoargumentowa̧, oznaczana̧ przez:
lub
i określona̧ przez tabelȩ:
p
0
1
1
0
Algebrȩ
możemy interpretować jako logikȩ zdaniowa̧. Zmienne sa̧ zdaniami,
które moga̧ przyjmować wartości prawda lub fałsz. Jeżeli oznaczymy prawdȩ przez i
fałsz przez , to powyżej zdefiniowane operacje odpowiadaja̧ znanym operacjom z logiki
zdań.
(alternatywa
i koniunkcja sa̧ przemienne),
(b)
(alternatywa i koniunkcja sa̧
ła̧czne),
(c)
(alternatywa jest rozdzielna wzglȩdem koniunkcji),
(d)
(koniunkcja
jest rozdzielna
wzglȩdem alternatywy),
(e)
, , , ,
(f)
,
,
, , (g)
, (prawa
pochłaniania),
(h)
,
(prawa de’Morgana),
(i) (prawo podwójnego przeczenia).
Lemat 1.1 Operacje alternatywy, koniunkcji i negacji spełniaja̧ nastȩpuja̧ce tożsamości:
(a)
Najprostsze dowody powyższych tożsamości polegaja̧ na sprawdzeniu, że zachodza̧ one
dla każdego możliwego podstawienia za zmienne wartości 1 lub 0. Na przykład, udowodnimy tożsamość:
Wszystkie możliwe podstawienia zebrane sa̧ w tabeli:
1.1. Algebra Boole’a
p
0
0
1
1
5
q
0
1
0
1
0
0
1
1
Ponieważ trzecia kolumna jest identyczna z pierwsza̧, wiȩc równość
jest
prawdziwa dla każdego podstawienia, czyli jest tożsamościa̧.
Innym przykładem algebry Boole’a jest zbiór wszystkich podzbiorów jakiegoś zbioru
z operacjami określonymi w nastȩpuja̧cy sposób:
jest suma̧ mnogościowa̧ jest iloczynem jest uzupełnieniem zbioru, 1 jest zbiorem ,
0 jest zbiorem pustym .
,
Także te operacje spełniaja̧ tożsamości z lematu 1.1.
Udowodnimy, dla przykładu, tożsamość
. Jeżeli element należy do
zbioru , to należy także do sumy
. Jeżeli zaś nie należy do , to nie należy
także do iloczynu
, a wiȩc nie należy do żadnego składnika sumy
, czyli nie
. Tak wiȩc zbiory i
zawieraja̧ dokładnie te same elementy,
należy do
a wiȩc sa̧ równe.
Oprócz trzech podstawowych, w algebrze Boole’a definiuje siȩ inne operacje. Dla nas
ważna bȩdzie operacja xor (ang. exclusive or) albo alternatywa wykluczaja̧ca. xor jest
operacja̧ dwuargumentowa̧, oznaczana̧ przez:
i określona̧ przez tabelȩ:
p
0
0
1
1
q
0
1
0
1
0
1
1
0
Operacja ta jest nazywana alternatywa̧ wykluczaja̧ca̧, ponieważ w logice zdaniowej
zdanie
jest prawdziwe, jeżeli albo , albo jest prawdziwe, ale nie jest prawdziwe,
gdy i naraz sa̧ prawdziwe. Operacja
ma nastȩpuja̧ce własności:
(a)
Lemat 1.2
(jest przemienna),
6
Rozdział 1. Funkcje boolowskie
(jest ła̧czna),
(c)
(xor jest rozdzielne
wzglȩdem
koniunkcji),
, , , ,
(d) , to .
(e) Jeżeli z działaniami xor i koniunkcji tworzy ciało.
(f) zbiór
operacji zapewnia, że możemy opuszczać nawiasy w wyrażeniach typu
Ła̧czność
(b)
, bez spowodowania niejednoznaczności.
Operacjȩ xor można zdefiniować poprzez alternatywȩ, koniunkcjȩ i negacjȩ:
W algebrze podzbiorów operacja xor odpowiada różnicy symetrycznej:
1.2 Wyrażenia boolowskie
Podobnie jak wyrażenia arytmetyczne, możemy budować wyrażenia boolowskie. Wyrażeniami boolowskimi sa̧ stałe i oraz zmienne boolowskie (typu boolean). Bardziej
złożone wyrażenia można budować za pomoca̧ operatorów boolowskich i nawiasów. Jeżeli i
sa̧ dwoma wyrażeniami boolowskimi, to wyrażeniami boolowskimi sa̧ także
nastȩpuja̧ce wyrażenia:
1.2.1 Wyrażenia boolowskie w jȩzyku Pascal
W jȩzyku Pascal wyrażeniami boolowskimi sa̧ stałe true i false oraz zmienne typu boolean. Wyrażenia boolowskie można też budować z wyrażeń arytmetycznych za
pomoca̧ tak zwanych operatorów relacyjnych. Jeżeli U i W sa̧ dwoma wyrażeniami arytmetycznymi, to wyrażeniem boolowskim jest wyrażenie:
U op W,
gdzie op oznacza dowolny operator relacyjny. Operatory relacyjne sa̧ zestawione w tabeli:
operator
=
<
>
<>
<=
>=
znaczenie
równe
mniejsze
wiȩksze
różne
mniejsze lub równe
wiȩksze lub równe
1.3. Funkcje boolowskie
7
Wyrażenia boolowskie można także budować za pomoca̧ operatorów boolowskich i nawiasów. Jeżeli U i W sa̧ dwoma wyrażeniami boolowskimi, to wyrażeniami boolowskimi
sa̧ także nastȩpuja̧ce wyrażenia:
U or W (suma lub alternatywa),
not W (negacja),
U and W (koniunkcja),
U xor W (exclusive or lub alternatywa wykluczaja̧ca),
(U) (wyrażenie U wziȩte w nawias).
Przykładami wyrażeń boolowskich w jȩzyku Pascal sa̧:
true or b,
(0<=x) and (x<=10),
b and not(x>=0),
(0<x) or (x>10).
gdzie b jest zmienna̧ typu boolean, a x — zmienna̧ liczbowa̧.
Wyrażenia boolowskie wystȩpuja̧ w jȩzyku Pascal w instrukcjach warunkowych lub
w pȩtlach while i repeat.
1.3 Funkcje boolowskie
Funkcje boolowskie
gdzie
zmiennych to funkcje:
. Mamy cztery funkcje boolowskie jednej zmiennej:
równa̧ 0,
identyczność ,
negacjȩ ,
funkcjȩ stała̧ równa̧ 1.
funkcjȩ stała̧
Wartości tych funkcji zestawiono w tabeli:
x
0
1
0
0
0
1
1
0
1
1
8
Rozdział 1. Funkcje boolowskie
Sa̧ to wszystkie funkcje boolowskie jednej zmiennej, ponieważ sa̧ to funkcje ze zbioru
w zbiór , a takich funkcji jest:
Funkcji boolowskich dwóch zmiennych jest:
Ich wartości zestawiono w tabeli:
x
0
0
1
1
y
0
1
0
1
0
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
0
1
0
0
0
1
0
1
0
1
1
0
0
1
1
1
1
0
0
0
1
0
0
1
1
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
1
1
1
1
Zauważmy, że cia̧g wartości każdej z tych funkcji czytany od góry do dołu stanowi zapis
binarny jej numeru. Przyjrzyjmy siȩ bliżej tym funkcjom:
jest funkcja̧ stała̧ równa̧ 0,
jest funkcja̧ stała̧ równa̧ 1,
jest koniunkcja̧,
jest alternatywa̧,
jest xorem,
jest implikacja̧ z do ,
jest implikacja̧ z do ,
jest równoważnościa̧,
jest rzutem na pierwsza̧ współrzȩdna̧,
jest rzutem na druga̧ współrzȩdna̧,
jest negacja̧ drugiej współrzȩdnej,
jest negacja̧ pierwszej współrzȩdnej,
jest zaprzeczeniem koniunkcji, tak zwany nand,
jest zaprzeczeniem alternatywy, tak zwany nor,
jest zaprzeczeniem implikacji z do ,
jest zaprzeczeniem implikacji z do .
1.3. Funkcje boolowskie
9
Jak widać, każda̧ z tych funkcji można przedstawić za pomoca̧ koniunkcji, alternatywy i
negacji.
Funkcji boolowskich trzech zmiennych jest:
nie bȩdziemy ich wszystkich wypisywać.
Nasuwa siȩ pytanie, czy każda̧ funkcjȩ zmiennych można przedstawić za pomoca̧
koniunkcji, alternatywy i negacji. Odpowiedź jest pozytywna. Najpierw przykład. Rozpatrzmy funkcjȩ boolowska̧ trzech zmiennych:
x
0
0
0
0
1
1
1
1
y
0
0
1
1
0
0
1
1
z
0
1
0
1
0
1
0
1
f(x,y,z)
0
1
0
1
1
1
0
0
Rozważmy wyrażenie:
, , , , czyli jest
przyjmuje wartość 1 tylko dla wektorów
Przyjmuje ono wartość 1 tylko dla jednego wektora
, czyli dla podstawienia
,
,
. Podobnie, wyrażenie przyjmuje wartość 1 tylko dla wektora
,
wyrażenie — tylko dla
, a wyrażenie — tylko dla
. Suma tych
wyrażeń:
(1.1)
równoważna naszej funkcji . Wyrażenie (1.1) jest w tak zwanej dysjunkcyjnej postaci
normalnej (DNF).
Funkcjȩ można też opisać w innej formie. Rozważmy wyrażenie:
Przyjmuje ono wartość 0 tylko dla jednego
wektora
, czyli dla podstawienia , , . Podobnie,
wyrażenie
przyjmuje
dla wektora
wartość 0 tylko
, wyrażenie
, a wyrażenie
— tylko
—
tylko
dla
. Iloczyn tych wyrażeń:
dla
, , , i , czyprzyjmuje wartość zero tylko dla wektorów
li jest równoważny funkcji . Jest to tak zwana koniunkcyjna postać normalna (CNF)
funkcji .
10
Rozdział 1. Funkcje boolowskie
Metodȩ tȩ można uogólnić na funkcje
zmiennych. Wprowadzimy oznaczenie:
Dla dowolnego wektora , niech
oznacza -ta̧ współrzȩdna̧ wektora .
Rozważmy teraz wyrażenie:
, dla każdego
Zauważmy,
że jest równe 1 tylko wtedy, gdy podstawimy . Widać z tego, że:
, czyli dla Jest to dysjunkcyjna postać normalna (DNF) funkcji (sumowanie oznacza tutaj alternatywȩ).
Aby otrzymać postać koniukcyjna̧, zaczynamy od wyrażenia:
, dla każdego
Zauważmy,
że jest równe 0 tylko wtedy, gdy podstawimy: . Widać z tego, że:
, czyli dla Jest to koniunkcyjna postać normalna (CNF) funkcji .
1.4 Sieci boolowskie
Najpierw przykład. Na rysunku 1.1 przedstawiono pewna̧ sieć boolowska̧. Jest to graf
skierowany z sześcioma wierzchołkami (bramkami) i piȩcioma krawȩdziami ła̧cza̧cymi
niektóre bramki. W tym i nastȩpnych przykładach przyjmujemy, że krawȩdzie sa̧ skierowane od góry do dołu. Bramki maja̧ etykiety. Jedna etykietowana jest stała̧ , dwie etykietowane sa̧ zmiennymi i , a trzy etykietowane sa̧ operatorami logicznymi, , i .
Bramki oznaczone stałymi lub zmiennymi sa̧ bramkami wejściowymi i żadne krawȩdzie
nie prowadza̧ do nich. Bramka ma jedna̧ krawȩdź wchodza̧ca̧, a bramki i po dwie.
Bramka jest bramka̧ wyjściowa̧, bo nie wychodzi z niej żadna krawȩdź. Z każda̧ bramka̧
w sieci możemy zwia̧zać wyrażenie boolowskie. W przypadku bramki etykietowanej stała̧
lub zmienna̧, tym wyrażeniem jest ta stała lub ta zmienna. Z bramka̧ zwia̧zane jest wyrażenie
, z bramka̧ wyrażenie , a z bramka̧ wyrażenie
.
Ogólnie, sieć boolowska to graf składaja̧cy siȩ z wierzchołków, nazywanych bramkami, i skierowanych krawȩdzi ła̧cza̧cych niektóre bramki. Każda bramka ma swoja̧ etykietȩ,
która̧ może być stała 1 lub 0, zmienna lub operator boolowski. W naszych rozważaniach
ograniczymy siȩ do czterech operatorów: , , i , ale można rozważać sieci z innym
zbiorem operatorów. Do bramek oznaczonych stałymi lub zmiennymi nie prowadza̧ żadne
1.4. Sieci boolowskie
11
Rysunek 1.1: Przykład sieci boolowskiej
krawȩdzie, sa̧ to bramki wejściowe. Bramki oznaczone przez maja̧ po jednej krawȩdzi
wejściowej, a bramki z pozostałymi operatorami maja̧ po dwie krawȩdzie wchodza̧ce. W
sieci boolowskiej nie może być cyklu, czyli cia̧gu krawȩdzi
takiego że
, i dla każdego spełniaja̧cego warunek
w sieci istnieje
krawȩdź od wierzchołka do wierzchołka
. Wierzchołek, z którego nie wychodza̧
żadne krawȩdzie, nazywamy wyjściowym. W sieci może być kilka bramek wyjściowych.
Z każda̧ bramka̧ w sieci możemy zwia̧zać wyrażenie boolowskie
. Robimy to
przez indukcjȩ ze wzglȩdu na strukturȩ sieci:
Najpierw przypisujemy wyrażenia bramkom wejściowym. W tym wypadku wyrażeniem tym jest etykieta bramki : stała lub zmienna.
Jeżeli bramka jest etykietowana negacja̧ i dochodzi do niej krawȩdź od bramki
oraz bramka ma już przypisane wyrażenie
, to bramce przypisujemy
wyrażenie
.
Jeżeli etykieta̧ bramki jest operator dwuargumentowy , to do prowadza̧ krawȩdzie
od dwóch bramek, i . Jeżeli przypisano już wyrażenia
i
bramkom
i , to bramce przypisujemy wyrażenie
.
Liczbȩ wszystkich bramek w sieci nazywamy kosztem sieci, a długość najdłuższej ścieżki
w sieci nazywamy głȩbokościa̧ sieci. Jeżeli w sieci istnieje bramka wyjściowa , to możemy powiedzieć, że sieć oblicza wyrażenie
. Z faktu, że każda̧ funkcjȩ boolowska̧
można przedstawić w postaci normalnej, wynika, że każda̧ funkcjȩ boolowska̧ można
przedstawić za pomoca̧ sieci. Jednak konstrukcja sieci dla funkcji boolowskiej poprzez
wyznaczanie postaci normalnej zazwyczaj prowadzi do sieci o dużym koszcie (liczbie
bramek). Poniżej omówiono przykłady sieci o stosunkowo małym koszcie.
12
Rozdział 1. Funkcje boolowskie
1.4.1 Suma (alternatywa) kilku zmiennych
Rysunek 1.2: Sieć boolowska obliczaja̧ca alternatywȩ ośmiu zmiennych
Na rysunku 1.2 przedstawiono sieć obliczaja̧ca̧ alternatywȩ ośmiu zmiennych:
Głȩbokość tej sieci wynosi 3.
Podobnie można skonstruować sieć licza̧ca̧ alternatywȩ
zmiennych, gdzie jest
jaka̧ś potȩga̧ dwójki. Głȩbokość takiej sieci wynosi
. Oczywiście tak samo możemy
zbudować sieć dla uogólnionej koniunkcji lub operatora .
1.4.2 Funkcje progowe
Funkcja
gdy liczba jedynek wśród
równa lub wiȩksza od w przeciwnym wypadku,
jest
jest funkcja̧ progowa̧ o zmiennych z progiem . Bȩdziemy zakładać, że
Sieci funkcji progowych dwóch zmiennych sa̧ proste, ponieważ:
Przedstawiono je na rysunku 1.3.
.
1.4. Sieci boolowskie
13
Rysunek 1.3: Sieci funkcji progowych dwóch zmiennych
Przypuśćmy, że mamy już sieci funkcji progowych zmiennych. Za ich pomoca̧
możemy skonstruować funkcje progowe
zmiennych (rysunek 1.4). Zrobimy to
posługuja̧c siȩ nastȩpuja̧cymi zależnościami:
Jeżeli
, to:
Jeżeli zestawimy równolegle sieci funkcji progowych, tak jak zrobiono to na rysunku 1.5, to otrzymamy sieć sortuja̧ca̧. Sieć ta bierze na wejściu cia̧g czterech bitów:
i zwraca na wyjściu te same bity w porza̧dku nierosna̧cym:
przykład
Na
gdy na wejściu bȩdzie cia̧g
, wówczas na wyjściu pojawi siȩ cia̧g
.
1.4.3 Sumator
Zastanówmy siȩ teraz, jak skonstruować sumator, czyli sieć, która bȩdzie dodawać dwie
liczby -bitowe:
i da w wyniku
oraz
bitów sumy:
14
Rozdział 1. Funkcje boolowskie
Rysunek 1.4: Sieć funkcji progowej
Na wejściu sumatora mamy bitów pierwszej liczby, , ... , , oraz bitów drugiej
liczby, , ... , , a na wyjściu
bitów sumy arytmetycznej , ... , . Nasz sumator
naśladuje szkolne dodawanie opisane w rozdziale o arytmetyce. Najpierw dodaje bity i
i oblicza ostatni bit sumy oraz przeniesienie , które ma być dodane do nastȩpnego
dodaje bity , oraz przeniesienie
bitu. Potem dla kolejnych pozycji od do
z poprzedniej pozycji i oblicza -ty bit sumy oraz przeniesienie do nastȩpnej
pozycji.
Na rysunku 1.6 przedstawiono sieć HA (ang. half adder — półsumator), która ma na
wejściu dwa bity,
i , a na wyjściu — bit sumy
oraz bit przeniesienia
.
Na rysunku 1.7 przedstawiono sieć FA (ang. full adder), która ma na wejściu trzy
oraz bit przeniesienia
bity, , oraz , a na wyjściu bit sumy
.
Na rysunku 1.8 przedstawiono schemat konstrukcji sumatora dla
. Podobnie
można skonstruować sumator dla dowolnego . Taki sumator bȩdzie zawierał
1.5. Operacje boolowskie na wektorach
15
Rysunek 1.5: Schemat sieci sortuja̧cej
bramek i miał głȩbokość
.
1.5 Operacje boolowskie na wektorach
Operacje boolowskie można wykonywać także na cia̧gach bitów określonej długości, czyli na elementach zbioru
oraz operacje koniunkcji, alternatywy, xor i negacji wykonywane sa̧ po współrzȩdnych:
Jeżeli wektor
oznaczymy przez 0, a wektor złożony z samych jedy
zerowy
Dla dwóch cia̧gów:
nek
— przez 1, to zachodza̧ wszystkie tożsamości lematu1.1 oraz tożsamości (a)—(e) z lematu 1.2. Nie jest natomiast na ogół spełniona własność (e) lematu 1.2,
16
Rozdział 1. Funkcje boolowskie
Rysunek 1.6: Sieć obliczaja̧ca HA (półsumator)
ponieważ jeżeli
, to
z działaniami i nie jest ciałem (nie ma elementu przeciwnego do
). Zbiór
jest przestrzenia̧ liniowa̧ nad ciałem
, z jako
dodawaniem oraz mnożeniem przez skalar zdefiniowanym przez:
(tutaj zero po lewej stronie jest zerem z ciała, a zero po prawej stronie jest
wektorem zerowym),
.
1.5.1 Operacje na wektorach w jȩzyku Pascal
W jȩzyku Pascal (i w wielu innych j˛ezykach) operacje boolowskie: and, or, xor,
neg, można stosować do liczb typu integer lub innych typów całkowitych (byte, shortint, word lub longint). Liczba traktowana jest wtedy jako cia̧g bitów jej przedstawienia
binarnego. Na przykład:
13 and 6=4
ponieważ 13 jest reprezentowane przez:
6 przez:
oraz:
(0000 0000 0000 1101) and (0000 0000 0000 0110) =(0000 0000 0000 0100),
a ten ostatni cia̧g reprezentuje 4 w typie integer. Podobnie zachodzi:
13 or 6=15; 13 xor 6=11; not 0=-1.
1.5. Operacje boolowskie na wektorach
17
Rysunek 1.7: Sieć obliczaja̧ca FA
1.5.2 Reprezentacja zbioru
Cia̧gi bitów z
moga̧ służyć do reprezentacji podzbiorów zbioru
Cia̧g
należy traktować jako funkcjȩ charakterystyczna̧ pewnego podzbioru.
Wtedy operacje boolowskie na cia̧gach odpowiadaja̧ operacjom na zbiorach. Alternatywa odpowiada sumie zbiorów, koniunkcja czȩści wspólnej, a negacja uzupełnieniu zbioru. Operacja xor odpowiada różnicy symetrycznej. Taka reprezentacja ma dwie zalety.
Zajmuje mało pamiȩci i operacje na zbiorach sa̧ wykonywane bardzo szybko, ponieważ
operacje boolowskie sa̧ operacjami niskiego poziomu.
Na przykład jeżeli chcemy reprezentować w pamiȩci komputera ułożenie kamieni w
grze w warcaby na 64-polowej szachownicy, to wystarcza̧ dwie liczby typu longint (po 32
bity). W jednej liczbie reprezentujemy położenie czarnych, a w drugiej położenie białych
kamieni (w grze w warcaby kamienie moga̧ leżeć tylko na 32 czarnych polach).
1.5.3 Szyfrowanie w systemie one-pad
Operacje boolowskie na wektorach można wykorzystać do szyfrowania. W systemie szyfrowania „one-pad” wiadomość i klucz sa̧ cia̧gami bitów (Jeżeli wiadomość jest cia̧giem znaków, to kodujemy każdy znak jako 8 bitów i cały cia̧g może by ć
traktowany jako ciag
˛ bitów). Zaszyfrowana wiadomość ma postać:
18
Rozdział 1. Funkcje boolowskie
Rysunek 1.8: Schemat sumatora
HA
FA
FA
FA
Zauważmy, że deszyfrować można według tego samego wzoru:
ponieważ
gdzie 0 reprezentuje wektor zerowy. Zaleta̧ tego systemu jest to, że jest on absolutnie bezpieczny. Zróbmy nastȩpuja̧cy eksperyment. Przypuśćmy, że ktoś ma zaszyfrowana̧ wiadomość i chce ja̧ odszyfrować przez odgadniȩcie samej wiadomości . Zastanówmy siȩ,
dla jakich cia̧gów istnieje klucz , taki że
, czyli inaczej, jakie wiadomości
moga̧ być zaszyfrowane w . Okazuje siȩ, że dla każdego cia̧gu
istnieje klucz
, taki że
. Wystarczy wzia̧ć . Mamy wtedy:
1.6. Funkcja parzystości (parity)
19
Wada̧ tego systemu jest to, że klucze musza̧ być tej samej długości co sama wiadomość i
musza̧ być trzymane w sekrecie. Powoduje to kłopoty z przesyłaniem i przechowywaniem
kluczy.
System one-pad można stosować w nastȩpuja̧cy sposób: Najpierw przesyła siȩ bezpieczna̧
poczta̧ (na przykład kurierska̧) zapasy kluczy, na przykład notesy z kartkami, gdzie każda
strona zawiera jeden klucz. Nastȩpnie szyfrowane depesze moga̧ być przesyłane mniej
bezpiecznymi kanałami. Trzeba tylko przestrzegać zasady, że jedna kartka może być użyta tylko raz (sta̧d angielska nazwa systemu). Same klucze powinny być losowane, aby
przeciwnik nie mógł ich odgadna̧ć.
Łamia̧c szyfry czȩsto korzysta siȩ z faktu, że wiadomości, lub ich fragmenty, wystȩpuja̧
z różna̧ czȩstościa̧ (prawdopodobieństwem).
Przypuśćmy dla prostoty, że szyfrujemy pojedyncze znaki i niech
bȩdzie zbiorem wiadomości (kody ASCII). Dla normalnych tekstów (listów) rozkład czȩstości poszczególnych znaków jest bardzo niejednostajny. Kody jednych liter wystȩpuja̧ dużo cześciej, niż innych, a pewne znaki nie wystȩpuja̧
wcale. Gdybyśmy teraz zastosowali jakiś prymitywny sposób kodowania bez klucza,
, to w zaszyfrowanej wiagdzie każdy znak zawsze jest szyfrowany za pomoca̧
domości rozkład czȩstości bȩdzie podobny (przepermutowany). Najczȩściej wystȩpuja̧cy
znak w wiadomości zaszyfrowanej odpowiada najczȩściej wystȩpuja̧cemu znakowi w tekście, itd. Można to wykorzystać przy łamaniu szyfrów.
Jak zaraz zobaczymy w przypadku szyfrów one-pad tak nie jest. Znaki w zaszyfrowanej wiadomości posiadaja̧ rozkład jednostajny, tak jakbyśmy losowali kolejne znaki i
dlatego analiza statystyczna jest tutaj bezużyteczna.
Niech
bȩdzie zbiorem wiadomości z dowolnym rozkładem prawdopodobieństwa, a
zbiorem kluczy z jednostajnym rozkładem prawdopodobie ństwa. Losujemy wiadomość
i klucz i obliczamy wiadomość
. Niech
oznacza zdarzenie, że wylosowano wiadomość , , że wylosowano
klucz , a
zdarzenie, że otrzymano zaszyfrowana̧ wiadomość . Zgodnie ze wzorem
na prawdopodobieństwo całkowite mamy
, ale
bo tylko dla jednego klucza
1.6 Funkcja parzystości (parity)
Zdefiniujmy funkcjȩ boolowska̧ parzystości (parity):
. Dlatego
20
Funkcja
Rozdział 1. Funkcje boolowskie
jest addytywna, to znaczy:
co wynika z faktu, że operacja jest ła̧czna i przemienna.
jest równa 1, jeżeli liczba jedynek w cia̧gu jest nieparzysta, oraz jest równa
0, jeżeli w cia̧gu liczba jedynek jest parzysta. Jeżeli bȩdziemy utożsamiać wektor ze
zbiorem, to
jest równe parzystości mocy zbioru .
dla dokładnie połowy wejść. To znaczy:
Twierdzenie 1.3
Pierwszy dowód. Twierdzenie wynika z faktu, że dokładnie połowa podzbiorów zbioru
jest nieparzystej mocy.
Drugi dowód. Weźmy wektor:
który ma jedynkȩ tylko na pierwszej współrzȩdnej. Zdefiniujemy teraz funkcjȩ :
Funkcja ła̧czy elementy ze zbioru
. Rzeczywiście:
w pary, ponieważ jeżeli
, to
dokładnie jedna z dwóch
,
a sta̧d
wynika,
że dla każdej pary ,
liczb
, jest jedynka̧, czyli dla dokładnie połowy Ponadto:
1.7 Zabezpieczanie danych
Funkcja
jest wykorzystywana do kontroli, czy dane nie zostały przekłamane podczas
przesyłania lub przechowywania. Przypuśćmy, że Małgosia chce przesłać Jasiowi wiadomość
i chce choć trochȩ zabezpieczyć przed przekłamaniem. Wtedy Małgosia wysyła razem z bitem
— jego podpisem. Przypuśćmy teraz, że Jaś dostał
wiadomość z podpisem
. Dla prostoty zakładamy, że podpis
nie został
przekłamany, na przykład Małgosia i Jaś moga̧ siȩ umówić, że przesyłaja̧ sobie tylko ta nie została
kie wiadomości , dla których
. Aby sprawdzić, czy wiadomość
przekłamana, Jaś oblicza
i porównuje go z
. Jeżeli
, to
Jaś ma pewność, że
. Jeżeli
, to Jaś przyjmuje, że
, choć
1.7. Zabezpieczanie danych
21
w tym przypadku nie może mieć pewności. Zauważmy, że jeżeli
jednym bicie, to
ma tylko jedna̧ jedynkȩ, wiȩc:
i
różnia̧ siȩ tylko na
Z drugiej strony:
Tak wiȩc jeżeli w przesyłanych danych
(przekłamany) jeden bit, bȩdzie
zostanie
zmieniony
można to wykryć porównuja̧c
z
.
z czego wynika:
Jest to bardzo stary system kontroli danych. Działa on dobrze, jeżeli przekłamania sa̧
przypadkowe i prawdopodobieństwo przekłamania dwóch bitów jest dużo mniejsze niż
prawdopodobieństwo przekłamania jednego bitu. Funkcja
jest jednak zbyt prosta,
aby zabezpieczyć dane przed złośliwym przekłamywaniem. Wystarczy bowiem zawsze
przekłamywać parzysta̧ liczbȩ bitów, aby rzecz siȩ nie wykryła.
Pokażemy teraz bardziej złożony sposób zabezpieczania danych przed przekłamaniem. Dla dowolnego wektora
zdefiniujmy funkcjȩ:
oblicza parzystość liczby bitów wektora , ale
Funkcja
sa̧ tylko bity na
to liczone
pozycjach
wyznaczonych przez wektor , inaczej —
parzystość przekroju i
.
jest addytywna:
Funkcja
oraz , to dla dokładnie połowy Twierdzenie 1.4
Jeżeli .
zachodzi
, to istnieje wektor z jedna̧ jedynka̧, taki że:
Dowód. Jeżeli Wektor powinien mieć jedynkȩ na pozycji, na której też ma jedynkȩ. Podobnie jak w
dowodzie twierdzenia 1.3, możemy teraz określić funkcjȩ:
mamy:
w pary.
Ponadto
która „zlepia” wektory z
22
Rozdział 1. Funkcje boolowskie
, a sta̧d — że dla każdej pary, ,
, dokładnie jedna z dwóch liczb
Z tego wynika, że:
jest jedynka̧.
Wykorzystuja̧c funkcje
, można zbudować lepszy system zabezpieczania danych. Na pocza̧tku Małgosia i Jaś zaopatruja̧ siȩ w cia̧g wylosowanych kluczy:
Jeżeli teraz
Małgosia
Klucze te powinny być trzymane w sekrecie.
przesłać Jasio chce
, to
z
bierze
kolejny
klucz
z
cia̧gu
i
wysyła
wi wiadomość
. Jaś po odebraniu
razem
podpisem
wiadomości razem z podpisem
nie jest przekłamywane) porównuje (tak
jak poprzednio
zakładamy, że
i
. Jeżeli , to dla każdego :
, to i dla połowy wektorów mamy:
Jeżeli zaś a wiȩc dla połowy wektorów mamy:
. Tak wiȩc z prawdopodobieństwem jedna druga Jaś wykryje, że kilka kolejnych
kluczy
.
Aby zwiȩkszyć to prawdopodobieństwo można brać
że w przypadku,
Wtedy prawdopodobieństwo,
gdy , mamy
,
dla każdego
, jest równe
.
1.8 Zadania
1. Udowodnij lematy 1.1 i 1.2.
2. Udowodnij, że tożsamości lematu 1.1 sa̧ tożsamościami w algebrze podzbiorów
zbioru .
3. Które z poniższych równości sa̧ tożsamościami w algebrze
:
a) p+qr=q+pr, b) (p+q)r=p+qr, c) (r+q)r=r+qr, d) (p+q)r=p(q+r)+qr.
4. Udowodnij, że wszystkie funkcje boolowskie dwóch zmiennych można przedstawić za pomoca̧ dwóch operatorów, koniunkcji i negacji (lub alternatywy i negacji).
1.9. Problemy
23
5. Udowodnij, że wszystkie funkcje boolowskie dwóch zmiennych można przedstawić za pomoca̧ jednego operatora nand (lub nor).
spełnia równanie przyjmuje wartość 1 tylko dla wektorów
,
. Przedstaw funkcjȩ w postaciach normalnych (dysjunkcyjnej i ko-
6. Ile funkcji
7. Funkcja
oraz
niunkcyjnej).
8. Narysuj sieć boolowska̧ dla funkcji z poprzedniego zadania.
9. Zaprojektuj sieć odejmuja̧ca̧ od siebie dwie liczby w postaci dwójkowej.
10. Zaprojektuj sieć, która mnoży dwie liczby dwubitowe.
11. Opisz schemat
sumatora dla liczb -bitowych, którego głȩbokość jest proporcjo
nalna do
.
12. Oblicz wartość wyrażeń x or y, x and y, not x, x xor y:
a) jeżeli zmienne x i y sa̧ typu shortint i przyjmuja̧ wartości: x=6, y=-3,
. Dla jakich wektorów , ?
wektory:
oraz . Dla jakich wektorów sa̧ dwa
14. Dane
,
.
b) jeżeli zmienne x i y sa̧ typu byte i przyjmuja̧ wartości: x=6, y=3.
13. Dany jest wektor
1.9 Problemy
1.9.1 System one-pad
System „one-pad” może być stosowany do cia̧gów liter alfabetu łacińskiego. Wtedy utożsamiamy litery z liczbami od 0 do 25 i zamiast operacji stosujemy:
czyli resztȩ z dzielenia przez 26. Jak wygla̧da wtedy operacja deszyfrowania?
Pokaż, że system one-pad z literami jest równie bezpieczny jak system z dwoma cyframi
0 i 1.
1.9.2 Zabezpieczanie
Zaproponuj zmiany w systemie podpisów opisanym pod koniec rozdziału, tak aby prawdopodobieństwo wykrycia błȩdu zwiȩkszyć do 0.75.
24
Rozdział 1. Funkcje boolowskie
1.9.3 Postać normalna
istnieje dokładnie jeden wektor:
Udowodnij, że dla każdej funkcji funkcji
taki że: