Wider das passwortvergessen

Wenn man ein paar kleinere webprojekte nebenbei betreut, kriegt man immer wieder lustige anfragen über mäjhl.

Seit ich es einmal erlebt habe, dass eines der von mir mitbetreuten projekte durch eine wörterbuchattacke übernommen wurde, lasse ich die menschen nicht mehr ihre passwörter selbst aussuchen, sondern gebe ihnen erstmal eines vor. Die meisten menschen kommen zum glück nicht auf die idee, dieses passwort zu ändern.

Als heute mal wieder jemand sein passwort vergaß und von mir schnell ein neues passwort bekam, da fragte mich dieser mensch, wie ich eigentlich immer auf meine passwörter komme, die sich viel leichter merken lassen als irgendwelche automatisch generierten passwörter. Nun, die antwort ist einfach: ich verwende hierzu ein programm. Und die passwörter sind leichter zu merken, weil dieses programm aussprechbare zeichenketten erzeugt. Ich bin eigentlich eher erstaunt, dass das nicht jeder so macht.

Wer auch immer wieder vor dem problem steht, anderen leuten passwörter zuteilen zu müssen, wird vielleicht das folgende C-programm mögen — es handelt sich um ANSI-C, das sich überall kompilieren lassen sollte. Allerdings muss es mindestens eine warnung wegen der uninitialisierten volatile-Variablen geben, diese hat einen undefinierten wert. (Diese programmiertechnik empfehle ich niemanden zur nachahmung, es ist wirklich dreck.)

/*
 *
 * propass.c
 * Pronouncible Password Generator (ANSI C)
 *
 * Elias Schwerdtfeger, http://www.tamagothi.de/
 *
 * This is FREE SOFTWARE, published under the terms of the PIRATE
 * LICENSE. This license allows you to do anything you like with
 * this little piece of code, as long as you do not sue me. ;-)
 *
 * The exact terms are available in german language at
 * http://www.tamagothi.de/lizenz/
 *
 * $Id: propass.c,v 1.2 2008/11/10 07:04:14 elias Exp $
 *
 */


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <time.h>


/*
 * This function makes a weak rand() implementation a little more
 * obscure. It should not be necessary for modern std libs, but
 * old compilers for MS/DOS are bundled with a very weak rand()
 * implementation, so I better take a little care of it...
 */
static unsigned 
crnd (unsigned limit)
{
  static int inited = 0;
  static int j = 19;
  volatile int dirtyhack; /* See comment below */
  register int i;
  register unsigned int a;

/*
 * This volatile variable "dirtyhack" gets a value from the stack,
 * which is obscure and shold generate a compiler warning. The
 * usage of such an uninited var is the worst way in generating
 * some randomness I ever coded, and it may (must) be changed in
 * later versions.
 */
  
  if (!inited)
    {
      srand (j = (int) time (NULL));
      inited = 1;
    }
  j = ((3 * j + 7 + dirtyhack) & 31) + 9;
  for (i = 0, a = 0; i < j; ++i)
    {
      a *= 31;
      a ^= rand ();
    }
  return a % limit;
}


static char *
propass (void)
{
  static char buf[128];
  static char vow[] = "aeiou";
  static char cst[] = "bdfgjklmnprstvz--";
  static char cen[] = "fklmnprstx------";
  static unsigned vow_l = 0;
  static unsigned cst_l = 0;
  static unsigned cen_l = 0;
  int i;
  int bp;
  int dgtpos;

  if (!vow_l)
    {
      vow_l = strlen (vow);
      cst_l = strlen (cst);
      cen_l = strlen (cen);
    }
  dgtpos = crnd (3) + 1;
  for (i = bp = 0; i < 5; ++i)
    {
      if (i == dgtpos)
	{
	  int r;
	  char tb_a[4];
	  char *tb = tb_a;

	  r = crnd (999) + 1;
	  sprintf (tb, "%03d", r);
	  for (; *tb; ++tb)
	    buf[bp++] = *tb;
	}
      else
	{
	  char c1 = cst[crnd (cst_l)];
	  char c2 = vow[crnd (vow_l)];
	  char c3 = cen[crnd (cen_l)];

	  if (isalpha (c1))
	    buf[bp++] = c1;
	  if (isalpha (c2))
	    buf[bp++] = c2;
	  if (isalpha (c3))
	    buf[bp++] = c3;
	}
    }
  buf[bp] = 0;
  return buf;
}


int 
main (int argc, char **argv)
{
  char *id = "$Id: propass.c,v 1.2 2008/11/10 07:04:14 elias Exp $";
  int n = 3;
  int i;

  switch (argc)
    {
    case 0: /* This may occur on Amiga OS ;-) */
    case 1:
      break;
    case 2:
      if (isdigit (argv[1][0]))
	{
	  n = atoi (argv[1]);
	}
      else
	{
	  fprintf (stderr, "Pronouncible passwords\n%s\n", id);
	  return EXIT_FAILURE;
	}
      break;
    default:
      fprintf (stderr, "Too many arguments\n");
      return EXIT_FAILURE;
    }
  if (n > 1)
    {
      printf ("Choose from the following %d password suggestions\n", n);
      for (i = 0; i < n; ++i)
	printf ("%d: %s\n", i + 1, propass ());
    }
  else 
    {
      printf ("%s\n", propass ());
    }
  return EXIT_SUCCESS;
}


/*
 *
 * $Log: propass.c,v $
 * Revision 1.2  2008/11/10 07:04:14  elias
 * Random number generation is a little more obscure now.
 *
 * Revision 1.1  2008/10/11 12:21:46  elias
 * Initial revision
 *
 */

Download des Quelltextes propass.c (die Datei muss umbenannt werden, da ich bei WordPress.org nicht alle Dateitypen hochladen kann).

Ich hoffe, es hilft auch anderen.

„YouTube“-videos konvertieren

Ein problemchen, dass man als linuxer immer wieder hat, ist das konvertieren von youtube-videos, die man sich mit hilfe von KeepVid oder mit dem praktischen, kleinen skript youtube-dl auf die eigene platte geholt hat, um sie vor dem digitalen vergessen zu bewahren.

Sicher, sowohl der VLCplayer als auch die gängigen abspielprogramme kommen mit flash-videos ganz gut klar. Aber ich finde aus verschiedenen gründen MPEG-videos viel nützlicher, da ich sie mit dem TCPMP auch auf älteren mobilen geräten anschauen kann. Deshalb konvertiere ich diese videos gern nach MPEG.

Das ist gar nicht so schwierig. Das unendlich nützliche programm ffmpeg kann eigentlich alles, was man dazu braucht. Fehlt eigentlich nur noch eine kommandozeile, um das mit allen videos in einem verzeichnis zu machen. Die ist auch nicht so schlimm, wie sie im ersten moment aussieht:

for i in *.flv; do j=`basename $i .flv`; ffmpeg -i $i $j.mpg; done

Das konvertieren geht übrigens erfreulich flott.

(Wer die kommandozeile scheut, kann es natürlich auch mit dem VLCplayer versuchen, der ebenfalls alle möglichen konvertierungen hinkriegt und darüber hinaus eine „richtige“ GUI hat. Aber so eine benutzeroberfläche scheint doch dazu da zu sein, den benutzer nicht durchzulassen — trotz meiner 25 jahre erfahrung in der bedienung von kompjutern gelang mir in den ersten drei versuchen keine brauchbare konvertierung der videos. Wohl dem, der ein windohs hat, denn dort gibt es jede menge leichter durchschaubarer tuhls für die fröhliche befehlserteilung mit ein paar mausklicks.)

Fröhliche fehlermeldung

Man lernt doch nie aus. Ich wusste gar nicht, was der GNU tar so alles an fehlermeldungen und warnungen kennt, bis ich eben ein tar-archiv auf eine CF-karte entpackt habe und mich über den hinweis freuen konnte…

unplausibel alter zeitstempel

…dass eine der dateien einen „unplausibel alten zeitstempel“ hätte. Sonst hätte ich wohl gar nicht mitbekommen, dass auf einen meiner schrottrechner wohl die BIOS-batterie nicht mehr genug energie hat, um diese echtzeit-uhr (was für ein toller begriff für die miesesten zur zeitmessung verwendeten kwarze) fortwährend mit strom zu versorgen. 😉

Nun gut, das problem sollte sich leicht erledigen lassen…

Wie viele meter sind ein kilometer?

Was wäre ich nur ohne dieses kleine programm, dass mir alle möglichen maßeinheiten zwischen verschiedenen systemen umrechnen kann? Wahrscheinlich wäre ich ein mensch, der gewisse verhältnisse immer wieder einmal nachschlagen müsste, wenn er mit menschen und texten aus der englischsprachigen welt zu tun hat. Dieses programm verrät mir zum beispiel, dass ein kilometer 1.093,6132983 yard oder 0,6213711922 miles entspricht, und was ich viel häufiger (und doch nicht wirklich oft) einmal brauche: es kann so etwas natürlich auch umgekehrt. Die existenz so vieler nützlicher, kleiner programme ist ein zeichen dafür, dass es viele nutzlose, große programme gibt.

Vielleicht hätte der programmierer dieses nützlichen, kleinen programmes bei seinen umrechnungen nicht ganz so viele nachkommastellen ausgeben sollen. Denn das programm verrät mir auch, dass ein kilometer 999,999999994 meter entspricht — was für mich eine ziemlich neue erkenntnis ist. :mrgreen:

Mann oh mann oh mann, zwei nachkommastellen sind im alltag genug und drei reichen wirklich immer! Sicher, ich hatte eben etwas zu lachen, aber manche programmierer scheinen gar nicht mehr darüber nachzudenken, wie man eine ausgabe benutzerfreundlich aufbereitet. Und dieser rundungsfehler bei der multiplikazjon mit 1000, der geht so was von gar nicht! Wie kriegt man so etwas nur hin, und wie schafft man es, so einen auffälligen fehler nicht zu bemerken? Rechnet das strunzprogramm bei den längenmaßen etwa intern mit nicht-metrischen einheiten? Anders kann ich mir solche fehler nicht erklären. Als ich mal probehalber ausrechnen ließ, wie viele gramm ein kilogramm ist, kam eine glatte 1000 raus, obwohl es da bei den anderen einheiten genau so viele unnütze stellen in der ausgabe gibt. Oh mann, wie gut, dass die franzosen als segensreichstes produkt ihrer revoluzjon das metrische system eingeführt haben!

Wider die keylogger

Eine richtig unreife beta-idee…

Über den kommenden, so genannten „bundestrojaner“ wissen wir gar nichts. Bis auf das eine: er wird als klassische schadsoftwäjhr nicht funkzjonieren. Es ist nicht davon auszugehen, dass ein staatlicher kräck problemlos installiert werden kann, es ist aber sehr sicher, dass jeder einigermaßen versierte kriminelle imstande sein wird, einen solchen angriff von seiten des BKA zu unterbinden — etwa, indm er ein unmanipulierbares betriebssystem von einer CD-ROM verwendet.

Wahrscheinlich wird der staatliche angriff auf andere weise funkzjonieren, durch manipulazjon der hardwäjhr. Eine nahe liegende idee ist ein verdeckter „einbruch“ in die wohnung der menschen, die bespitzelt werden sollen, um die tastatur mit einem stück zusätzlicher hardwäjhr zum mitloggen der eingaben zu bringen. Das abhören von internetz-telefonie geht genau so einfach wie das jetzt schon übliche verwanzen einer wohnung. Es gibt einfach keinen vernünftigen grund, einen angriff in softwäjhr zu machen.

Beim mitloggen der eingaben würden zum beispiel sämtliche login-daten an die spitzel gelangen, so dass allein darüber eine beliebige einsicht in die kommunikazjon und sogar eine manipulazjon der kommunikazjon möglich würde.

Erstaunlicherweise ließe sich der passwortklau durch manipulierte tastaturen sehr einfach unterbinden. Hierzu müsste in den gängigen GUI-biblioteken nur der kohd für passwortfelder ein bisschen erweitert werden. Diese felder könnten — ähnlich wie comboboxen — ein zusätzliches steuerelement erhalten, dass eine bildschirmtastatur aufklappt, mit der das passwort ohne benutzung der tastatur erfasst werden kann. Wenn dieser tastatur bei jeder benutzung ein anderes layaut gegeben würde, dann wäre auch ein träcking der mausbewegungen völlig nutzlos. Die eingabe eines passwortes wäre zwar sehr unkomfortabel, aber eben auch sehr sicher, wenn nicht gerade zusätzlich eine überwachungskamera auf den monitor gerichtet wäre.

Ich finde die idee gerade noch zu unreif, um sie mal auf die GTK-entwicklerliste zu pohsten, aber sie ist dennoch interessant. Richtig nützlich wird das erst in verbindung mit einer nicht manipulierbaren versjon eines betriebssystemes, die von einem medium gebuhtet wird, dass nur lesbar ist, ein solches system könnte mit ein paar weiteren ergänzungen für sichere internetz-arbeit im zeitalter des staatlichen überwachungswahns in der BRD versehen werden.

Und mal wieder richtig dichten…

Ich plane gerade, mich mal langsam an eine neue und an die aktuellen zustände angepasste version von 2c4, meinem wörterbuch der richtig-dichtung, zu setzen. Nicht, dass das alte ding schlecht geworden wäre, aber zum einen gibt es jetzt, acht jahre später, schon wieder völlig neue formen des hirnfickenden sprachmissbrauches, und ich sehe auch ein paar zusammenhänge zwischen den verschiedenen formen des schwindels inzwischen mit sehr anderen augen. Insbesondere habe ich in der ersten versjon die religiösen dinge nicht in der erforderlichen breite gewürdigt.

Diesmal sind meine bedingungen für eine dermaßen große arbeit wesentlich mieser als damals. Immer noch sitze ich ja als unsteter obdachloser an ständig wexelnden rechnern, während ich damals wenigstens eine konstante arbeitsumgebung hatte, was mir das erstellen spezieller anwendungen zur verwaltung und bearbeitung der texte sehr erleichterte.

Ich hatte kurz darüber nachgedacht, die gesamte anwendung als webanwendung zu machen, aber das setzt voraus, dass ich für meine bearbeitungen einen internetz-zugang habe. Und den habe ich eher sporadisch, so dass diese möglichkeit auch ausscheidet. Tatsächlich möchte ich nicht noch mehr von diesem zeug, mit dem ich mich schon jeden tag bei meinen bloggs rumschlagen muss; ich möchte in aller ruhe genau dann offlein schreiben können, wenn die gedanken reif zum schreiben sind.

Und dafür brauche ich eine anwendung, die ich eben immer zur verfügung habe, und zwar eine sehr einfache anwendung, die sich dem kreativen prozess nicht in den weg stellt, sondern mir sanft in dem dient, was ich mir vorgenommen habe.

Leider gibt es nur einen rechner, den ich wirklich beinahe immer benutzen kann, und das ist der hp jornada 820e, der mir vor einigen monaten als großzügige spende zugesteckt wurde. (Tausendfach danke, SvOlli!) Er befindet sich fast immer in meinem rucksack und ersetzt mir jetzt dank seiner sehr brauchbaren tastatur schon seit monaten das notizbuch. Aber was auf dieser recht müden mühle wirklich fehlt, das ist eine brauchbare umgebung, um darauf mit dem gewohnten komfort einer skriptsprache proggen zu können — und auch eine java-laufzeitumgebung gibt es nicht, sonst könnte man wenigstens eine anwendung in java schreiben…

In den letzten zwei tagen habe ich mir die mühe gemacht, einen prototypen für mein verwaltungsprogramm in „PocketC“ zu hacken. Das ding hat schon jetzt einen anständigen umfang, implementiert die von mir benötigte grundfunkzjon und ist auch durchaus schon einsetzbar, aber bevor ich es auf richtige daten loslasse, möchte ich es doch gern „richtig“ fehlerfrei haben, so dass ich wohl noch ein paar tage damit beschäftigt sein werde.

Tja, und so sieht diese anwendung aus...

Die gesamte datenhaltung erfolgt in zwei dateien, die ich so entworfen habe, dass ich sie (hoffentlich) in einer gängigen skriptsprache weiter bearbeiten kann — das einzige mögliche problem sehe ich in der vollständigen datenhaltung in unicode, zu der ich mich entschlossen habe, um den leidigen zeichensatzproblemen zwischen verschiedenen plattformen zu entkommen. (Warum dieses drecksbetriebssystem nicht in UTF-8 speichern kann, wird mir auch ein ewiges rätsel bleiben.) Und nein, ich denke gar nicht daran, bei der aufbereitung der texte für das internetz oder in eine druckfähige PDF-versjon auf eine moderne skriptsprache zu verzichten, denn in diesem abgespeckten C ist das ganze proggen wie ein krampf im arsch. Alles, was man als C-programmierer für selbstverständlich hält, gibt es nicht. (Immerhin hat man wenigstens einen präprozessor, um kohdfragmente bedingt übersetzen zu können, was sehr bei der entwicklung hilft.)

Obwohl der prototyp zurzeit noch keine luxusfunkzjonen hat, speichert er immerhin schon eine vollständige versjons-geschichte jeder einzelnen begriffsdefinition weg. Ein königreich für eine richtige datenbank, die hätte einen großteil der programmierung trivial gemacht!

Wenn dieses ding demnächst einmal fertig wird, denn werde ich es vollständig unter meiner piratenlizenz veröffentlichen, damit auch andere in den genuss kommen. Natürlich werde ich auch ein elementares beispielskript beilegen, das zeigt, wie man die erzeugten daten weiter verarbeiten kann — schließlich erfindet niemand das rad gern doppelt. Für kleinere, von nur einem autoren befüllte projekte kann so etwas auch eine gute alternative zu einem fetten wiki-system sein, wenn dabei nicht gerade tagesaktuelle ergänzungen eingepflegt werden sollen und wenn in der mobilen schreibtätigkeit ein vorteil gesehen wird.

Eine laufzeitumgebung für PocketC gibt es für etliche mobile geräte. Allerdings verwende ich auch einige funkzjonen der windows-API, so dass ich die lauffähigkeit nur unter windows CE zusagen möchte. (Und die windows-API unter mikrigweich fensterchen CE verhält sich in einer weise ungewohnt, dass mir mehrfach das grinsen vergangen ist…)

Was sind gothics?

Es ist immer wieder erheiternd, wenn man einen blick in die stastiken wirft und zu gesicht bekommt, welche suchbegriffe auf die eigenen sites führten. Heute fragte jemand guhgell die wichtige frage „was sind gothics“.

Nun, diese frage kann ich beantworten. Die so genannten „gothics“ sind menschen, die sich schwarz anziehen, einen musikgeschmack haben, der völlig den erwartungen an einen so genannten „gothic“ entspricht, die sich an orten aufhalten, wo so genannte „gothics“ sich eben aufhalten. Aber wenn man sie fragt, was denn nun eigentlich so ein „gothic“ wäre, denn lautet ihre erste antwort: „ich bin kein gothic“. 😀

Sind denn alle spämmer krank geworden?

Nicht nur, dass bei mir keine SEO-spämm mehr ankommt, ich habe im moment geradezu einen mangel an spämm. Die gute, alte mäjhl ist zurzeit wieder so richtig benutzbar geworden, das spämmaufkommen bei mir ist in den letzten tagen erheblich zurückgegangen — sogar das spämmaufkommen in meinen blogs. Sind alle spämmer auf einmal krank geworden?

Und. Womit soll ich da das spämmblog befüllen?

(Wenn dieser zustand anhält — so sehr ich es mir wünsche, so wenig glaube ich daran — denn kann ich das blog bald dichtmachen. Oder endgültig auf die idjotie der normalen reklame umwidmen.)