Tuesday, January 02, 2018

Cartes d'identité et passeports suisses

Une rumeur circule parmi les enfants des écoles en Suisse. Elle dit que le chiffre à la fin du numéro de la carte d'identité indique le nombre de sosies. Et celà serait utile pour les caméras de surveillance et leurs logiciels de reconnaissance faciale.

C'est évidemment absurde, mais le phénomène est tout de même intéressant d'un point de vue sociologique et politique, puisqu'il reflète une perception plutôt inquiétante de nos sociétés par les enfants. Après tout, les logiciels de reconnaissance et les caméras de surveillance sont bien réels...

Cependant, la sociologie et la psychologie enfantine étant des domaines bien trop complexes pour moi, j'ai juste voulu savoir ce qu'étaient réellement ces chiffres. Sûrement des chiffres de contrôle, qui apparaissent à la fin de tous les codes qui doivent pouvoir être lus par des machines, comme le nos des comptes bancaires, des cartes de crédit, etc.

La signification des chiffres est vaguement expliquée sur le site de la Confédération pour les passeports, mais pas pour les cartes d'identité. Quand à l'agorithme utilisé pour le calcul du chiffre de contrôle, il n'est mentionné nulle part. De plus, sur l'exemple qui illustre les chiffres pour le passeport, le chiffre de contrôle est FAUX!

L'exemple indique "9" en bas à droite au lieu de "6"!

Avec une telle avarice d'explications de la part des autorités, il n'est pas étonnant de voir surgir des rumeurs bizarres.

Heureusement, pour la carte d'identité, il y a une page en allemand de Wikipedia qui explique le tout, y compris l'algorithme utilisé pour les chiffres de contrôle.

Ainsi, après mon exploration ancienne du calcul "modulo 10" pour certains chiffres de contrôle de banques et autres, j'ai pu m'amuser à faire un petit script qui donne le nombre de sosies les chiffres de contrôle pour les cartes d'identité et les passeports suisses.
L'algorithme de base en Perl est dans cette fonction "cksum":

sub cksum {
 my $num = shift;
 $num = uc( $num );       # convert tu uppercase
 $num =~ s/[^A-Z0-9<]//g; # and remove spaces etc.

 my @digits = split //, $num;
 my @multipliers = (7,3,1);
 my $cksum = 0;

 for (my $i=0; $i < @digits; $i++) {
  my $n = $digits[$i];

  $n = 0 if ($n eq "<");

  if ($n =~ /[A-Z]/) {  # A=>10, B=>11, ..., Z=>35
   $n = ord( $n ) - 55;
  }

  $cksum += $n * $multipliers[ $i % 3 ];
 }
 return $cksum % 10; # keep only last digit
}

Et pour les geeks, le script complet est ici.

Labels: , ,

Tuesday, July 26, 2011

Importing root certificates into Firefox and Thunderbird

Update Feb. 2012: see at the end for an alternative for new profiles.

This is ridiculously complicated and makes me wonder whether I should just drop Firefox in Windows and go back to IE.

The problem:

How to automatically pre-import your self-signed certification authority into all user profiles for Firefox and Thunderbird.

The solution:

You need the Mozilla certutil utility (not the Microsoft certutil.exe).

In Windows, you would need to compile nss tools or use some ancient hard to find Windows binary to get it. But all my user profiles are on a Samba server, so it was much easier to do it on the server, with the added benefit of having Bash and not needing to struggle with the horrible cmd.exe.

First install the tools. In Debian, it would be:

apt-get install libnss3-tools

Then adapt this long command to your paths:

find /path/to/users-profiles -name cert8.db -printf "%h\n" | \
while read dir; do \
  certutil -A -n "My Own CA" -t "C,C,C" -d "$dir" -i "/path/to/my_own_cacert.cer"; \
done

(-printf "%h\n" prints just the directory, without the file name, one per line. That is fed to the $dir variable needed in the certutil command. The -n option is a required nickname for the certificate. -t "C,C,C" is what will make you accept any certificate signed by this CA you are importing).

See also: the certutil documentation, and a better explanation of the trust arguments (-t option).

Alternative:

The above solution works to add a certifcate to an existing profile's cert8.db. To have newly created profiles include the certificate, you need to put a good cert8.db file into the Program's directory.

  1. Either import your certificate(s) manually into an existing profile, or use the steps above to add the certificate(s) to a cert8.db file.
  2. Copy the new cert8.db to the Firefox (or Thunderbird) program directory, into a "/defaults/profile" subdirectory. (ie. "C:\Program Files (x86)\Mozilla Firefox\defaults\profile\").

This way, newly created profiles will copy this cert8.db file instead of creating a new one from scratch.

Labels: , , , , , , , , , , , ,

Monday, June 22, 2009

Pirater la musique, c'est mal

...

Il faut l'acheter pour que les multinationales du disque ne finissent pas comme les constructeurs de voitures américains artistes gagnent quelque chose. Alors j'essaye...

J'étais allé voir iTunes il y a des années, mais c'était réservé aux américains, et ne proposait que des fichiers cryptés que je ne pouvais pas écouter sur l'appareil de mon choix.

Puis sont venus les .mp3 de Amazon.com. Je m'y suis précipité, mais ils sont réservés aux américains.

Depuis, iTunes est disponible en Suisse, et il paraît qu'ils ont enfin renoncé au DRM dans leurs fichiers. Alors j'essaye itunes.ch. Pour découvrir que je ne peux télécharger de la musique que si j'installe le programme iTunes sur un ordinateur Mac ou Windows. Non merci.

Après de longues recherches par Google qui me propose des dizaines de sites et de manières de télécharger immédiatement la musique que je souhaite par divers moyens illégaux, je découvre Qobuz.com qui semble très intéressant. Hélas, c'était durant un week-end où leurs serveurs souffraient de pannes, et je n'arrive à rien.

Quelques semaines plus tard je retourne sur Qobuz.com, et j'y fais mon choix. Au moment de "passer à la caisse", je suis envoyé chez ClickandBuy qui semble être leur seul moyen de payement. ClickandBuy prend note de toutes mes données de carte de crédit, adresse, téléphone, etc. puis doit absolument m'envoyer un SMS avec un code de confirmation. Hélas, le code n'arrive jamais, malgré 2 tentatives, et mes vérifications minutieuses du numéro de téléphone portable que je leur donne.

Mais j'ai entendu dire que Amazon France offrait enfin aussi des .mp3. J'y trouve ce que je veux, mais au moment de mettre la musique à télécharger dans mon "panier", je reçois ce message: "Message important Nous sommes désolés. Nous n'avons pas pu traiter votre commande en raison de restrictions géographiques appliquées au produit que vous avez essayé d'acheter. Veuillez consulter les conditions d'utilisation de ce produit pour déterminer les restrictions géographiques applicables. Nous nous excusons pour la gêne occasionnée."

Heureusement, je peux écouter toutes ces musiques chez mon voisin, qui semble connaître de meilleurs moyens pour se procurer de la musique rapidement et sans complications...

Labels: , , , , ,

Thursday, April 06, 2006

en_CH locale

English may not be one of the official Swiss languages (yet?), but it is certainly useful in a computer system. I don't want server logs and error messages in French or German or Italian (or Romantsch?). These things are easiest to understand and get help about in English. But I don't want dates in the confusing US "MM/DD/YY" format either, or times in AM/PM. Most importantly: I want sorting to work correctly with accented letters, and I want Perl to understand accented letters for \w, the uc(), lc() functions, etc.

So I made my own en_CH locale. Tested it in Debian stable (3.1 "Sarge"), and it seems to do what I expected. If you want to try it out, the steps are below. And it is quite easy to edit language_COUNTRY files to suit your needs.
# cp /usr/share/i18n/SUPPORTED /usr/share/i18n/SUPPORTED.orig
# echo -e "en_CH ISO-8859-1\nen_CH.UTF-8 UTF-8" | sort - /usr/share/i18n/SUPPORTED.orig >/usr/share/i18n/SUPPORTED
# wget -O /usr/share/i18n/locales/en_CH http://alma.ch/linux/en_CH
# echo "en_CH ISO-8859-1" >>/etc/locale.gen
# echo "en_CH.UTF-8 UTF-8" >>/etc/locale.gen
# dpkg-reconfigure locales
You may also need to edit your /etc/environment file and/or /etc/default/locale if they have a left-over LANGUAGE= line.
At your next login, your locale should be set to en_CH, and these little tests should work:
$ echo -e "é\ne\nA\nà\nE" |sort
$ perl -Mlocale -e 'print "Uppercase accented é and à: ", uc("éà\n")'
$ echo -e "é\ne\nA\nà\nE" |perl -Mlocale -ne 'while (/(\w+)/g) {print "$1\n"}'
(Note that for Perl, you need use locale;).

Update: For Ubuntu 6.10 ("Edgy"), see also this post in this ubuntu forum thread!

Labels: , , , , , ,