Blockchain Bullshitbingo

Das heutige (für Euch gestrige) Bingowort lautet (mal wieder) „Blockchain“. In folgenden Beiträgen wurde es bislang entdeckt:

Nach der Probenahme muss ihm zufolge die Eischale nicht wieder verschlossen werden, da sich die innere Eimembran von selbst wieder zusammenzieht. Die Genauigkeit liege bei rund 98 Prozent, die lückenlose Rückverfolgbarkeit des Prozesses stellt eine Blockchain sicher.

Quelle: https://www.heise.de/newsticker/meldung/Per-Laser-gegen-den-Huehnertod-4312665.html?wt_mc=rss.ho.beitrag.rss

Dabei hätten die Rechteinhaber über die Blockchain konsequent mit wasserfesten Lizenzen versorgt werden können.

Quelle: https://www.heise.de/newsticker/meldung/Urheberrechtsreform-CDU-CSU-Digitalexperte-verreisst-EU-Kompromiss-4313266.html

Das es heise.de getroffen hat, Pech, vielleicht weniger mit Politik, mehr Technik unterbringen. Ist nur so ein Vorschlag 🙂

Im ersten Beitrag ging es um die Erkennung des hühnischen Geschlechts bereits im Ei, um keine geborenen Tiere töten zu müssen,  im zweiten Artikel um die Äußerung einer/nes PolitikerIns zu Artikel 13 der neuen EU-Urheberrechtsreform.  Aber auch sonst ist heute wieder Bullshitbingo in den News : „Blockchain-Unternehmer“, „Blockchain-Bundesverband“ und “ Smart Contracts“ natürlich mit Blockchain.

Logischerweise braucht keine dieser Anwendungen eine verteilte Datenbank, deren Inhalt manipuliert werden kann, wenn jemand nur genug Rechenleistung einsetzt. Ob ein Ei ein Hähnchen werden sollte, oder eine Henne, muß man kaum in einer verteilten Kryptodatenbank speichern, genauso wenig wie private Verträge in einer, ja von wem eigentlich, betriebenen Datenbank stehen müßten. Und natürlich müssen auch Lizenzvereinbarungen nicht in einer global verteilten Datenbank stehen, die kann man auch bequem in einer normalen Datenbank speichern, die nicht soviel Energie verbrennt wie eine Blockchain.

Und der Hype geht weiter, der österreichische Kurier nennt die Blockchain, die „disruptivste“ Technologie seit dem Internet. Stimmt 🙂 1700 Kryptocoins, meistens wertlos, und jede Menge schwachsinns Ideen sind natürlich genau, was einen Hype ausmacht 🙂 Wenn die Technik so gut für alles ist, wieso gibt es dann keine praktischen Lösungen, die über „Wir haben was altes in Blockchain neuerfunden“ hinausgehen. Wäre das die Technologie der Zukunft, würde es schlagartig Anwendungen geben, weil die Technik gibts ja locker schon 10 Jahre. Da ist genug Zeit, eine brauchbare Anwendung zu finden. Was haben wir stattdessen ? Bitcoin … ein riesen Geldtransfer von „gierig“ zu „clever“ 🙂

Wer/was befeuert eigentlich son Hype?

Na Geschäftsleute und Politiker, die nicht abgehängt werden wollen und jetzt händeringend nach Möglichkeiten suchen. Blöd nur, daß die ersten Blockchain-Unternehmen schon wieder weg sind vom Markt. Die EU DS GVO machte Ihnen den gar aus 😀 Ich liebe die GVO 😀

Die Luxenburger Börse hat jetzt übrigens den Wertpapiertransfer per Blockchaineintrag als legal erklärt. Auch hier Frage, wer führt diese Blockchain und muß die wirklich verteilt sein ? Warum hat man nicht schon vorher eine digitale Signatur einer Kette von Einträgen benutzt? Und vorallem, wie verhindere ich, daß in der Blockchain was steht, aber die realen Papiere dann physikalisch nochmal verkauft werden, so gegen Bargeld ? Kommt am Ende raus, muß doch wieder einer aufpassen 🙂 und dann gehts auch wieder ohne Chain.

 

 

MariaDB Bugfix sorgt für ein bisschen Ärger

Ein kleiner selbstverursachter Logikfehler bei Datenbankstrukturen macht kleinen Webanwendungen grade ein bisschen Stress. Damit Ihr damit keinen Stress habt, eine kurze Erklärung zum Thema und wie man das behebt und vermeidet.

MariaDB Update

Bis vor kurzem hatten wir auf den Servern noch die MariaDB 10.1.33 laufen, jetzt die 10.2.21 . Beim Wechsel von 10.1 auf  10.2 haben die Devs von MariaDB den globalen SQL-Modus umgestellt, daß er jetzt eher failed, statt tolerant zu sein.

Eine Beispieltabelle:

beispiel

#NameTypKollationAttributeNullStandardKommentareExtra
1 int(11) Neinkein(e)AUTO_INCREMENT
2 int(11) Nein2
3 text utf8_general_ciNein
4 int(11) Neinkein(e)

Jetzt führen wir diesen Insert aus:

INSERT INTO beispiel SET id=NULL, test = 3, name=“Fritz“, counter = 0;

Klappt. Kein Fehler. Nächster Insert :

INSERT INTO beispiel SET name=“Hans“, counter = 0;

Klappt.Tabelle sieht jetzt so aus :

testnamecounterid
3Fritz01
2Hans02

Nun der Insert hier:

INSERT INTO beispiel SET id=NULL, test=9,name=“Killer“;

und schon kommt die Meldung:

ERROR 1364 (HY000): Field ‚counter‘ doesn’t have a default value

Vollkommen zurecht, weil ich im Insert der Datenbank durch Auslassung gesagt habe, nimm den Defaultwert für das ausgelassene Feld.  Da es keinen Defaultwert für das Feld gibt, kann die Datenbank den auch nicht benutzen.

Jetzt ist das aber in MariaDB 10.1 noch möglich gewesen. Das lag daran, daß sich mit 10.2.4 die Defaults des Servermode geändert haben und der Modus „STRICT_TRANS_TABLES“ jetzt aktiv ist, wenn die  Webanwendung das nicht selbst anders haben will. Beweis:

MariaDB [msctest]> INSERT INTO beispiel SET id=NULL, test=9,name=“Killer“;
ERROR 1364 (HY000): Field ‚counter‘ doesn’t have a default value
MariaDB [msctest]> SELECT @@SQL_MODE;
+——————————————————————————————-+
| @@SQL_MODE |
+——————————————————————————————-+
| STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+——————————————————————————————-+
1 row in set (0.00 sec)

MariaDB [msctest]> set sql_mode = „ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION“;
Query OK, 0 rows affected (0.00 sec)

MariaDB [msctest]> INSERT INTO beispiel SET id=NULL, test=9,name=“Killer“;
Query OK, 1 row affected, 1 warning (0.00 sec)

Jetzt die spannende Frage, mit was die Datenbank den Wert aufgefüllt hat, von dem Sie nicht weiß, wie der aussehen müßte:

idtestnamecounter
13Fritz0
22Hans0
59Killer0

Mit „0“ , was bei einem INT ja auch naheliegend ist.

Klare Ansage

Bevor jetzt jemand den MariaDB Entwicklern die Schuld dafür geben will, daß die eigene Webseite nicht mehr so funktioniert: selbst Schuld!

Ihr habt von vornherein einen Logikbug in Eurer Datenbankstruktur + Weblogik gehabt, sich darüber zu beschweren ist heuchlerisch. Da die Webanwendung sich selbst den Modus setzen kann, mit dem die Datenbank mit Ihr arbeiten soll, hätte man das ja auch mal selbst explizit so setzen können, wie man es braucht. Defaults können sich ändern, damit muß man rechnen.

Abhilfe schaffen

  1. Datenbankstruktur so ändern, daß ein Default vorhanden ist.
  2. Im Insert keine Felder auslassen, sondern explizit setzen.
  3. vor der Anwendung set sql_mode = „ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION“;  absetzen, dann hat man wieder das alte Verhalten

Viel Spaß jetzt damit 🙂

Die Größe von installierten Paketen ermitteln – RPM Edition

Was Niko in seinem Techgruben-Beitrag Größe von installierten Paketen anzeigen für debianbasierte Paketmanager schön gezeigt hat, geht leider bei RPMs nicht ganz so leicht, aber das wird uns nicht aufhalten. @Nico: Guter Beitrag.Weitermachen 🙂  In meinem Beitrag geht es heute nicht nur um die Größe, sondern auch um das „wie man zum Ergebnis kommt“. Wer die Lösung sucht, die ist ganz am Ende.

Die Größe von installierten Paketen ermitteln

Die Option „-q“ steht bei rpm für Query, also die Datenbankabfrage. rpm -q paketname  liefert den vollständigen Paketnamen aus. Einfaches Beispiel:

$ rpm -q firefox
firefox-65.0-4.fc28.x86_64

Wir haben den Paketnamen, klasse. Und nun ? Wenn wir mehr über Firefox wissen möchten, dann müssen wir RPM das sagen:

$ rpm -qi firefox
Name : firefox
Version : 65.0
Release : 4.fc28
Architecture: x86_64
Install Date: Mo 18 Feb 2019 12:01:46 CET
Group : Unspecified
Size : 221446243
License : MPLv1.1 or GPLv2+ or LGPLv2+
Signature : RSA/SHA256, Di 05 Feb 2019 12:51:38 CET, Key ID e08e7e629db62fb1
Source RPM : firefox-65.0-4.fc28.src.rpm
Build Date : Mo 04 Feb 2019 19:07:57 CET
Build Host : buildvm-20.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager : Fedora Project
Vendor : Fedora Project
URL : https://www.mozilla.org/firefox/
Bug URL : https://bugz.fedoraproject.org/firefox
Summary : Mozilla Firefox Web browser
Description :
Mozilla Firefox is an open-source web browser, designed for standards
compliance, performance and portability.

Die Option „i“ gibt uns also detaillierte Informationen über das Paket aus. Da könnte man mit grep und viel Bashmagie was drehen. Bleibt noch das Problem, daß wir den Paketnamen brauchen. Das können wir leicht umgehen, in dem wir pauschal alle Pakete auflisten lassen. Die Option „-a“ macht es möglich:  rpm -qia  . Probiert es nicht aus, das ist echt viel an Infos 🙂

Das Queryformat

Natürlich geht das besser, denn RPM bietet an, daß es die Infos genauso ausgibt wie man es braucht. Die nötige Option lautet „–queryformat“ :

$ rpm -q firefox –queryformat „%{NAME} uses %{SIZE:humaniec}\n“
firefox uses 211M

Schön, damit kann man arbeiten 🙂 Die Größe nach vorn, Paketname dahinter:

$ rpm -q firefox –queryformat „%{SIZE:humaniec}:%{NAME}\n“
211M:firefox

Das ist schon besser. Da kann man einen Sort drauf ansetzen:

rpm -qa –queryformat „%{SIZE:humaniec}:%{NAME}\n“ | sort -r -n

„-r -n“  Reverse, also groß zuerst, und numerisch sortieren. Sort erkennt automatisch, was keine Zahl mehr ist und sortiert entsprechend. Aber stimmt die Ausgabe auch wirklich?

Schauen wir uns mal die Top 30 an :

$ rpm -qa –queryformat „%{SIZE:humaniec}:%{NAME}\n“ | sort -r -n | head -n 30

1024K:python2-coverage
1022K:openssh-server
1019K:xorg-x11-drv-wacom
1019K:libgcrypt
1018K:tix
1016K:libmx
1015K:vte
1015K:python2-simplejson
1010K:pyzy
1009K:ncurses-libs
1008K:libappstream-glib
1007K:libxcb
1007K:libodfgen
1007K:boost-locale
1006K:eris
1006K:dracut
1004K:libxcb
1004K:libtomcrypt
1003:openoffice-brand-impress
1002:openoffice-brand-writer
1000:openoffice-brand-math
1000:openoffice-brand-draw
1000:openoffice-brand-calc
1000:openoffice-brand-base
999K:at-spi
997K:vte3
996K:mdadm
995K:rubberband
995K:ncurses-libs
994K:cjs

Ein Paket mit 1024 KB, also 1 MB, soll das größte Paket in der Liste sein? Das kann nicht sein.  Ist es auch nicht. Schon das Firefoxpaket von oben hat 211 MB. Wo ist da jetzt der Fehler?

Ist klar, wir lassen die Paketgröße mit dem Zusatz „:humaniec“ ausgeben. Das erzeugt die 211M oder 1024K , weil „211M:firefox“ besser lesbar ist für Menschen, also „221446243:firefox“. Nun ist aber 1024 größer als 211 🙂 Sort hat also alles richtig gemacht, aber die sortierten Informationen waren falsch vorbereitet.

So wird es besser

$ rpm -qa –queryformat „%{SIZE}:%{NAME}\n“ | sort -r -n | head -n 30
2104146639:0ad-data
573182723:supertuxkart-data
526795437:wesnoth-data
369138973:wine-debuginfo
346355557:linux-firmware
319608404:naev-data
250326767:wine-staging64
242843598:skypeforlinux
236453994:wine-core
221999655:wine-staging-common
221446243:firefox

Wenig überraschend toppt 0.AD alle anderen Pakete mit seinen 2GB an Grafikdaten 😉 Firefox mit seinen 211 M liegt abgeschlagen auf Platz 11 😉

Es geht auch etwas kürzer, aber nicht viel:

rpm -qa –qf „%{SIZE}:%{NAME}\n“ | sort -rn | head -30

Natürlich habe ich mal rumgeschaut, was zu dem Thema schon mal verfasst wurde. Leider war nichts besseres da, da es wohl schon das Optimum ist. Aber man kann natürlich immer noch was daraus lernen, z.b. wie man mit AWK Bytes in MB umrechnen kann :

rpm -qa –qf ‚%{SIZE} %{NAME}\n‘ | awk ‚{printf(„%sMb %s\n“, $1 / 1000 / 1000, $2)}‘ | sort -k1 -n

Dummerweise funktioniert das Sort in der Ausgabe nicht sauber, aber der AWK Teil ist nett 🙂
(Quelle für den AWK Part: list-all-packages-by-installed-size-bytes-on-rpm-distros )

 

…und TLS 1.3 gebleichenbacht :(

Wenn Du denkst, Du hast gute Krypto installiert, kommt ein Bleichenbacher um die Ecke und was ist die Essenz?

Die X.te Bleichenbacher Attacke funktioniert auch bei TLS 1.3 !

Wie ZDNET heute berichtet, ist einen Team von Forschern mit einem CACHE Timingangriff gelungen, auch im TLS 1.3 die RSA Parameter der Verbindung auszulesen. Ehrlich gesagt, lohnt es nicht mal darüber zu berichten, weil das mit den Bleichenbacherangriffen immer so weiter gehen wird, wenn der uralte RSA Kram da nicht mal rausfliegt.

Gestern habe ich noch die GNU Admins angeprangert, weil die nur TLS 1.0 können, aber falls das eine fatalistische Prognose zur TLS Krypto der Zukunft war, Glückwunsch: Volltreffer, versenkt.  Es lohnt nicht auf neue Versionen zu gehen, wenn die dann doch wie die Fliegen umfallen. Es müßte doch noch mehr Leute geben die was davon verstehen und endlich mal was ohne RSA bauen, daß funktioniert.

Quelle: https://www.zdnet.com/article/new-tls-encryption-busting-attack-also-impacts-the-newer-tls-1-3/

Gnu.org im Jahr 1998 stecken geblieben

Ja, ich weiß, Ihr könnt es nicht mehr lesen, der xte Mailserver der keine TLS 1.2 kann, nur leider hat der hier eggs.gnu.org eine wichtige Rolle, der handelt nämlich Emails für gnu.org . Kein TLS 1.2 , keine Emails mehr aus Europa.

„.. und dabei ist FOSS & TLS 1.2 kein Widerspruch.“

Trying TLS on eggs.gnu.org[209.51.188.92:25] (10):

secondstest stage and result
[000.007]Connected to server
[000.167]<–220 eggs.gnu.org ESMTP Exim 4.71 Sat, 09 Feb 2019 11:54:20 -0500
[000.167]We are allowed to connect
[000.167] –>EHLO www6.CheckTLS.com
[000.174]<–250-eggs.gnu.org Hello www6.checktls.com [159.89.187.50]
250-SIZE 52428800
250-PIPELINING
250-STARTTLS
250 HELP
[000.174]We can use this server
[000.175]TLS is an option on this server
[000.175] –>STARTTLS
[000.185]<–220 TLS go ahead
[000.186]STARTTLS command works on this server
[000.275]Connection converted to SSL
SSLVersion in use: TLSv1
Cipher in use: DHE-RSA-AES256-SHA
Certificate 1 of 3 in chain: Cert VALIDATED: ok
Cert Hostname VERIFIED (eggs.gnu.org = eggs.gnu.org | DNS:eggs.gnu.org | DNS:mail.gnu.org)
cert not revoked by CRL
cert not revoked by OCSP
serialNumber=03:f9:06:4d:6c:6d:1e:1c:83:03:50:8a:32:c0:d5:a9:da:99
subject= /CN=eggs.gnu.org
issuer= /C=US/O=Let’s Encrypt/CN=Let’s Encrypt Authority X3
Certificate 2 of 3 in chain: Cert VALIDATED: ok
cert not revoked by CRL
cert not revoked by OCSP
serialNumber=0a:01:41:42:00:00:01:53:85:73:6a:0b:85:ec:a7:08
subject= /C=US/O=Let’s Encrypt/CN=Let’s Encrypt Authority X3
issuer= /O=Digital Signature Trust Co./CN=DST Root CA X3
Certificate 3 of 3 in chain: Cert VALIDATED: ok
cert not revoked by CRL
cert not revoked by OCSP
serialNumber=44:af:b0:80:d6:a3:27:ba:89:30:39:86:2e:f8:40:6b
subject= /O=Digital Signature Trust Co./CN=DST Root CA X3
issuer= /O=Digital Signature Trust Co./CN=DST Root CA X3

wenn man mal genauer hinsieht mit :  „openssl s_client -connect eggs.gnu.org:25 -starttls smtp -tls1“

Subject=/CN=eggs.gnu.org
….
New, SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
….
250 HELP

sieht dann auch, daß der Cipher noch aus SSLv3 Zeiten stammt, was nicht verwundert, weil TLS 1.0 nur SSLv3 mit SNI Support ist.

Falls jemand von Euch jemand den GNU Leuten Emails schicken will, machts gleich in Klartext 😀