VDA 5050 is an open protocol devised by the German association of car manufacturers (Verband der Automobilindustrie), it is meant to become the common language that AGVs (autonomous guided vehicles) use to exchange information with a controller. To get an idea of what it looks like - imagine a fleet of robots moving pieces and materials from one spot to another on a factory floor. A controlling server sends instructions, telling each robot where to go, which checkpoints to drive through, what actions to perform and with what settings (e.g. "pick up this specific box and bring it over there, place it on the second shelf").
VDA 5050 uses MQTT to transmit JSON payloads to several purpose-specific topics. In the screenshot you can see several windows, each displaying the data arriving to these topics.
In VDA 5050 terms, the control server commands AGVs by sending them orders, each order is represented through a set of nodes connected by edges. Each node and edge has a sequence number, indicating the succession in which it has to be traversed. Optionally, any node or edge can be associated with some actions (e.g., load, unload) that have to be performed there.
In addition to that, nodes and edges can be "released" or "unreleased". An AGV is only allowed to traverse released nodes and edges, which are collectively referred to as the "base". The unreleased part is called the "horizon". Thus, when an order is sent to the AGV, it has a base and a horizon, such that the AGV knows what it has to do in the long term, but until further notice, it will only move up to the end of the base, but no further.
Suppose you sent an order to the AGV, expecting it to stop at the end of the base. However, there's a problem - it stopped sooner than it should. When you build a list of possible explanations, you might come up with this:
To test each hypothesis, you have to look at the JSON payload, find each node and edge, see if it is in the right position in the list (i.e. are in the correct sequence), then check the sequenceNumber
attribute of each node, then check whether the released
parameter is true
where necessary, etc.
Since JSON payloads are usually minified, this is no easy task, because everything is written in one line. In practice you usually need to scroll to the right point in the log, copy/paste the payload to a text editor that prettifies it for you, so you can look at an indented structure that is more readable.
More readable doesn't mean "piece of cake", it is just a step ahead of the raw thing, but you are still dealing with a "find a needle in a haystack" type of problem. Clearly, this is time consuming and boring. Moreover, it is error-prone, because we can easily lose count, misremember, or simply forget something.
When dealing with monotonous tasks we can keep our focus for a while, but it definitely doesn't make work joyful. To make things better, we ask ourselves "what are we looking for when debugging VDA 5050 implementations?". Here's a list:
Notice that each question gets a yes/no answer, just one bit. However, getting each bit is a tedius task.
The next step, if either of those answers is "yes", would be to dig a bit deeper:
While implementing this protocol myself, I spent a lot of time looking for needles in haystacks, answering the questions above. You can try to do it in your mind, but when orders are complex you end up sketching them on paper, because otherwise you end up juggling too many items in your head.
After going through that multiple times, I developed a payload visualizer which is now freely shared by [arculus](arculus.de).
This is a debugging aid built to "scratch my own itch" - I had a problem and I had to do something about it.
The VDA 5050 visualizer is inspired by a mixture of several concepts:
Basically, the visualizer illustrates the data exchange between the AGV and the control node in the form of a chat. You can scroll through the history of messages, while the alignmnent of "bubbles" indicates who sent the message.
Each entry is not just a piece of text, but a visual representation of the JSON payload that was sent.
Thus, you can easily grasp the big picture and observe the dynamics of the relationship between the AGV and the control server.
Usability is further improved by sprinkling a bit of logic on top. Let's say you see the nodes, but you want to check their sequence numbers - you do that by going through each node and edge.
The payload visualizer takes that burden off your mind, because it will display problematic sequence numbers in red. So, the problem is now changed from "find the sequence number of each node, then look at the subsequent node, compare the numbers and see if anything is fishy about it" into "is there anything red?".
The former task is more complex from the cognitive point of view, whereas the latter is a purely visual problem that your eyes can solve on their own.
The same applies to out-of-order headerId
s that come with each message. The only way to know whether you've received a duplicate, or if you've missed a message is by keeping track of the header ID. The payload visualizer makes it easy - anomalies are highlighted in red. The same applies to updateId
s.
What about unexpected gaps within base (i.e., some unreleased nodes surrounded by released ones)? That's easy - the base is "bold and green", whereas the horizon is "thin and gray". As in the previous case, the problem with a high cognitive load was transformed into a less demanding one - "are there any gray blobs surrounded by green ones?".
The VDA 5050 payload visualizer also displays the various flags that the AGV sends with each message, e.g., does it need a base extension? Is it driving? Is it charging? Is it carrying loads? and so on.
Besides that, you can click a button to see the raw JSON payload itself, in case you don't trust the visualizer, or if you want to be able to replicate the problem by storing the message and sending it later.
Each status message is accompanied by a minimap where you can see where the AGV was at the time.
Whenever a new order is set, a "separator line" is rendered, so you can easily identify such orders; otherwise you'd have to compare the orderId
s, which happen to be UUIDs, so they're pretty long.
Pressing Ctrl+P
will allow you to print the entire "chat history" between the AGV and the control node, as well as export it to a PDF. This way you can share logs with your colleagues, so they can all troubleshoot a case by following the exact sequence of events that lead to an error.
All the graphical information rendered on the screen is SVG, so it brings several benefits:
Ctrl+F
and type an order ID, a header ID, or an action - anything, really! You can quickly find it, because the graphics are not "just a picture", but they're semantically annotated tooThe visualizer works in your browser and connects directly to your broker. Thus, everything runs on your own infrastructure, so nothing potentially sensitive could leak out (e.g., that you're working on VDA 5050 in the first place, how many AGVs you have, what kind of errors you encounter, etc.).
Moreover, since the visualizer simply subscribes to the same topics as the AGV and the control node - it gets copies of all the messages, but doesn't publish any messages on its own. Thus, it is guaranteed not to interfere with anything.
Another benefit is that you don't need to change anything in your AGV or in the controlling node. The payload visualizer is just another MQTT subscriber connecting to your broker, that's it.
Since everything runs in the browser, it can also be used on your mobile phone if you want to have a look at the traffic while debugging something on-site.
The tool requires an MQTT broker that supports websockets. This feature is widely supported by many brokers, I'll illustrate how to do it in Mosquitto:
/etc/mosquitto/conf.d/websocket.conf
Add this to the contents (adjust port numbers to your needs)
listener 1883
listener 1884
protocol websockets
systemctl mosquitto restart
As a result, you'll have the regular MQTT over TCP on port 1883, and MQTT over websockets on port 1884.
This payload visualizer is a tool I wish I had at hand when I was implementing VDA 5050, it would have saved me a lot of time and mental effort. It transforms boring and error-prone problems like "find the wrong number in this mountain of data" into purely visual problems that can be solved much easier, by the visual equivalent of "muscle memory".
Drop by vda5050.arculus.de to see it in action. Feel free to provide feedback and request new features.
]]>Un mic exercițiu de reverse-engineering - de unde preia datele aplicația iBus
? Ofer aici un rezumat a pașilor întreprinși pentru a găsi răspuns la întrebarea dată. Explicația nu conține ilustrații sau instrucțiuni exacte, e superficială, dar suficient de detaliată ca un om care știe să „conecteze punctele” să poată replica pașii fără dificultate. Informația este oferită cu un scop exclusiv didactic, ce faci cu ea - e doar responsabilitatea ta.
Metoda prezentată aici nu este neapărat optimală, e doar calea pe care am parcurs-o, având la îndemână instrumentele pe care le aveam la moment.
În rezultat am constatat că aplicația, cel mai probabil, totuși folosește HTTP pentru a primi date.
strings ibus.apk > lines.txt
cu speranța că voi găsi acolo ceva bun, de exemplu parole sau adrese hardcodate, sau ceva de acest gen. O inspecție vizuală a rezultatelor nu a arătat nimic promițător.apktool d ibus.apk
, iar apoi am început să inspectez cu ochiul neînarmat rezultatele.socket
, connect
sau http://
. Ultima căutare a dat un rezultat, în MainActivity
am găsit un URL promițător, pe care l-am deschis în browser: nimbus.wialon.com/locator/5f59baffc............
.Am văzut același ecran pe care-l văd în aplicația Android. Astfel am ajuns la concluzia că aplicația este un webView care vizualizează această pagină. La etapă curentă nu mai e necesar să fac ceva cu telefonul pentru că site-ul poate fi examinat și la un calculator ordinar, cu ecran mare și tastatură zmeurie.
Utilizatorul atent a atras atenție faptului că aplicația nu cere nicio parolă. Așadar putem presupune că nu se face nicio autentificare sau că datele de acces sunt înscrise chiar în codul aplicației.
ctrl+shift+i
ca să văd ce mai este interesant pe acolo.mqtt
în denumire, am presupus că o face cu ajutorul librăriei paho mqtt
, cu care sunt familiar.userName
și am pus un breakpoint în locul unde se apelează funcția care se conectează la server și face subscribe
la anumite topic'uri.Aici admit că am avut un pic de noroc deoarece sunt familiar cu ideologia protocolului MQTT și cu instrumentariul Paho, de aceea știam ce să caut și cum să identific că ceea ce am găsit este ceea ce căutam. La breakpoint am văzut care sunt valorile variabilelor în momentul când ne conectăm la server. Parola e goală, username e hardcoded. L-am încercat cu un MQTT client alternativ și am văzut că primesc și eu JSON'urile pe care le așteptam.
Așadar, știm că aplicația iBus este un webView care vizualizează un URL, care la rândul său execută un Javascript care preia datele de pe un MQTT server a unui third party, care distribuie fluxul de date prin websockets. Adresa serverului, portul și numele de utilizator pot fi extrase din codul paginii.
Cum arată mesajele propriu-zise:
{
"tm": 1609151367,
"id": 20464445,
"msg": {
"r": 20690,
"pos": {
"c": 91,
"y": 47.0378283,
"s": 20,
"x": 28.8112483
},
"t": 1609151365,
"o": 519,
"tt": 275981,
"i": 13.5
}
}
tm
- unix time, timpul expedierii mesajului. msg/r
- pare a fi un identificator de vehicul, pos
- coordonatele și posibil viteza și azimutul.
Pentru a-mi simplifica munca, am verificat dacă pot să primesc datele și prin MQTT-over-TCP, cu ajutorul mosquitto_sub
. Da, e posibil, aici e comanda dată în base64 bW9zcXVpdHRvX3N1YiAtdSAyQWJsZllqQUpDNU0xempETk02OFdLb2tscGdSZko4N2E3 aGRUcUJzUXg0RlVkOXhONXR5REhHT1VNdVhrcVRrIC1oIG1xdHQuZmxlc3BpLmlvIC10I G5pbWJ1cy9sb2NhdG9yLzVmNTliYWZmYzM3MTQ0YTM5MzlkMjFiZDhhY2M1ZTQ1LyM=
iBus nu divizează informația pe rute, ci transmite întotdeauna toate datele. Dacă sunt 121 vehicule, și dimensiunea unui pachet JSON este de 230 octeți, într-o oră consumi ~10MB de trafic, chiar dacă nu ai nevoie de toate datele pentru că te interesează doar o rută anumită. Așadar, dacă te uiți în aplicație timp de 6 minute, consumi 1 MB de trafic.
În Roataway datele vin selectiv, doar pentru rutele alese de utilizator, ceea ce constituie un avantaj pentru oamenii care au traficul redus.
Am aflat cum aplicația preia datele de la server și care este formatul pachetului de date. Această informație ar face posibilă integrarea datelor în alte sisteme sau elaborarea unui mecanism alternativ de vizualizare.
]]>Contribuția mea constituie un Telegram-bot care informează voluntarii despre misiunile pe care trebuie să le îndeplinească (cum Tom Cruise în "Collateral", avea un gadget care-i spunea ce are de făcut ;-). Poți face click pe imagine pentru e vedea acest bot în acțiune:
Fiind întrebat despre motivațiea mea de a participa în acest proces, am zis că îmi place să fac ceva care are impact pozitiv asupra societății, și că nu e prima oară când mă implic în astfel de inițiative. Versiunea completă a răspunsului este redată aici:
În contextul pandemiei, o mare parte a reprezentanților statului și-au demonstrat nu doar incompetența, dar și ostilitatea deschisă față de cetățeni. Aceasta se manifestă prin absența transparenței și răspândirea informațiilor false, cât și prin setarea incorectă a priorităților. Când spun ”incorectă” nu am în vedere ”sub-optimală”, ci chiar ”ostilă” - acțiunile și deciziile lor nu doar că nu ajută poporul, dar ne aduc prejudicii economice și ne expun unui pericol și mai mare. Având în poziții-cheie astfel de ”черезвычайно мощные организаторы” precum Dodon Igor sau Chicu Ion, este evident că cetățenii nu sunt primul punct în agenda lor, decât în cazul când se caută pe cine să învinuiască. (n.r. acei care nu sunt enumerați aici explicit să nu creadă că au fost uitați, pur și simplu lista nemernicilor nu ar trebui să fie mai lungă decât textul propriu-zis).
Trebuie să evidențiez că nimic din ceea ce am scris mai sus nu este o surpriză. Oare avea cineva mari așteptări de la ”tehnocrații” cu diplome false?
Pentru a schimba dinamica în favoarea noastră, trebuie să ne gândim la soluții care exclud din ecuație ”aleșii poporului” (și ”aleșii aleșilor poporului”), astfel încât să nu depindă nimic de ei. Deciziile trebuie să fie luate de oameni a căror piele e în joc - adică de noi, și nu de acei pentru care Moldova este ”planul B” (iar ”planul A” este undeva prin Cehia, unde sunt arene de sport foarte bune, sau în Elveția, unde iarba e mai verde).
Un proiect open-source și liber, precum acesta la care am contribuit, este o încercare de a schimba dinamica jocului. ”Open source” înseamnă că primești nu doar plăcinta, dar și rețeta pregătirii acesteia. ”Liber” înseamnă că nu există constrângeri care să-ți interzică să pregătești propria plăcintă, să modifici rețeta sau s-o transmiți altora.
Un astfel de sistem nu poate fi vândut la preț exagerat (cum 3 semafoare de 4.8 megalei), nu poate fi impus cuiva care nu are nevoie de el (cum ar fi un covor de flori sau o linie galbenă desenată prin oraș), nu poate fi furat sau expropriat (cum o pădure), nu poate fi luat în arendă la preț simbolic (cum un apartament sau un automobil), nu poate fi transformat în bani și depozitat în una din țările care doresc să ”distrugă statalitatea republicii”, nu poate fi ”scris” pe părinți sau pe soția filantropă. Mai mult decât atât, sistemul acesta este absolut transparent și nu ascunde nimic.
Natura open-source a proiectului este un mecanism de protecție - nimeni nu poate parazita proiectul în niciun fel și nu poate împiedica funcționarea acestuia, deoarece acțiunile sunt efectuate de voluntari. Astfel, ”aleșii” s-au ales cu un loc în afara ecuației și nu ne pot ”ajuta” în niciun fel, deoarece interesele lor nu se intersectează cu ale noastre.
Așadar, încurajez pe fiecare dintre noi să se gândească la situația din Moldova în termeni de "cum să-i excludem din ecuație". Trebuie să schimbăm ceva în abordare; altfel, dacă facem exact aceeași ce am făcut până acum, vom primi exact aceeași ce am primit până acum.
În încheiere aș vrea să amintesc cuvintele profetice a unuia din experții de pe prima linie: acești paraziți ar putea să intre în istoria Moldovei, apoi să iasă din ea fără a lăsa o urmă. Nici nu vom observa că au fost.
]]>The notes are derived from Simon Sinek's "Infinite game". The notes are for personal use, but you might find them useful.
Keep in mind that this book lacks scientific rigour. The stories it provides make intuitive sense, but this wouldn't pass peer review, if it were a journal paper.
Have a greater mission. Examples:
Write down your cause and have it formalized - it will be easier for someone to pick up the torch and carry on after your demise.
These notes are based on "The richest man in Babylon", they were written for personal use, but they might be helpful to others as well. The book is written as a series of stories, meant to teach the reader about the optimal ways of managing one's budget, and what mistakes to avoid.
In retrospect, it is clear that most people (my past self included) lack training in this area. Therefore:
Those who are "lucky" are just people who could identify an opportunity when it arose, and acted swiftly.
Şi nu e nici cum cântă trubadurul,
şi nici aşa cum în romane-i explicat.
Nici pe departe nu-i cum pare în "reţele",
şi filmele ne-au dezorientat...
Iar dac-ar fi s-asculţi ce spune lumea
s-accepţi cum ţi se dă, denaturat,
să te găteşti de o dezamăgire,
căci zborul tau va fi abrupt scurtat.
Şi totuşi hai să-ţi spun ce e iubirea,
să ştii că ai ieşire din impas:
exclude tot ce sigur ştii că nu e,
şi-atunci iubirea-i tot ce a rămas.
Take a moment to think
for a while
and question the path that you chose.
Would you have walked it again, if you could?
Or left it to vultures and crows?
Take a break, catch your breath
for a while,
get out of this torturing wheel!
Whose race are you running, again?
Is the finish line even real?
Take a step back
for a while,
and look at yourself from aside.
Who is the person in front of your eyes?
Is it someone that you recognized?
Take a chance, try a change,
and defy the programming.
Use your free will while you have it.
Break the loop, dammit!
These are my notes about "How to have impossible conversations", by Peter Boghossian and James A. Lindsay. After reading Boghossian's previous book, I had no doubts that this one would be useful, and I wasn't disappointed!
It is full of practical tips and examples and I recommend it to anyone who enjoys discussing controversial subjects. The notes are for personal use, they make sense to me, they may not make sense to you. Read the book to make your own impression.
p.s. this was written on a phone, so there might be typos or short-hand notation that doesn't make sense.
Build rapport
The gift of doubt. You gotta have it yourself before you attempt to give it to someone.
Model the behaviour you want to see in your partner (i. e. Do it yourself and set an example). This implies being open to changing your own mind.
The example where the Muslim community leader would dodge the question "do you believe that women should be stoned to death for adultery?". The approach was to make them ask {me} the question, hear me say "no", then asking them to provide an analogous answer.
Ask them to ask you.
The "unread library effect" = illusion of explanatory depth.
Examples: Explain how a toilet works. Draw a bike schema.
Experiment:
Usually after step 3 the confidence drops significantly.
How to apply this:
In this case you modelled ignorance and lead them to exposing the "unread library" effect themselves.
This can happen when you blame someone specific. That's the problem with blame.
Instead, think of it in terms of contributing factors (as there are usually more than one).
Example: what factors in the strategy of the democrats lead to a defeat in elections? (vs. It is Clinton's fault). This invites the Republicans to provide an outside perspective, and invites the democrats to reflect.
Probing one's epistemology is perceived less threatening than directly challenging their beliefs
Let people be wrong, don't necessarily try to make them right
Focus on what source of info we can both rely on, to have a common ground. This might make the partner think about matters of reliability and trustworthiness of information sources.
These are Rapoport's rules:
Avoid facts when dealing with people who say "nothing will change my mind" or "no evidence will change my mind".
If their beliefs were formed without taking evidence into account, no amount of evidence will make them change their mind. They simply operate in another dimension.
disconfirmation: under what conditions would you say the belief is false - an effective way to take a step towards doubt. Basically, it is "falsifiability" in science. If something is unfalsifiable, it is regarded as the absolute, unconditional truth.
Not at all
Disconfirmable under wildly implausible conditions Example: in what circumstances would you reject the belief that Jesus was resurrected? The answer might be "show me the bones of Christ"
Disconfirmable, here's what it would take
Techniques to use at the end
If they say they've had the same beliefs forever, they are either lying to you, or to themselves or are über doxastically closed. Consider closing the conversation, you did what could be done at this stage.
For example, "yes, but what about those who buy weapons illegally?" → "yes, and what about those who...?"
Top it up a notch, by switching to "interesting, and what do you think of..?"
Ury Fisher's twist: "I can see how you feel strongly about this, and I respect that; let me tell you, however, how it looks from my angle". Or a more advanced version: "... If you don't mind, let me..."
Alter casting - cast a person into an alternate role, from which they are easier to be influenced.
How to unmask/deal with such cases:
Go with it - you are almost guaranteed to learn something new, you might even change your mind. You might see what techniques they apply, how they apply them and thus improve your own skills.
Stonewalling - if there is no reaction or feedback, there is no intervention going on. So you can deflect such interventions on you by not responding. Or by providing closed (not open-ended) answers like "yeah" or "not really".
The remaining sections are about techniques of detecting that someone applies this method on you, and how to deal with it.
]]>The freedoms you have will erode,
straightjacketing you down the road.
As time passes by you'll think more
of what you don't have, but had plenty before.
The hourglass runs out of sand,
look closer, make note of the trend.
The choices you still have today...
Tomorrow - they're going away.
"How nice", you remark,
without giving a chance
to finish the thought
that ensues.
And so I am left,
ruminating all day...
Do I want to be
in my shoes?
The notes are based on "The now habit" by Neil Fiore:
If you're involved in multiple activities, failure in one of them is less likely to bring you down.
Think about the example of a plank you have to walk
Every "I have to do X" statement must be converted into
Specific changes in wording your statements:
Detect these patterns and act immediately - this is a moment when you can consciously decide to not follow the old path.
Overcoming one of them will weaken the others, because you gain confidence as you do so.
Beware of the fear of success. Sometimes, succeeding will bring more headaches, for example if you apply for a new job and actually pass the interview, this will potentially lead to some unpleasant effects - moving to a different city, quitting the current job (and having "the talk" with your current boss, etc). At times, just thinking about these things makes you less motivated to work on getting the new job!
Dealing with a project requires an understanding of its
It seems that some procrastination is a way to disrespect/resist/object authority, by insubordination. You can turn the context upside down, by setting these constraints and then defying them.
All this other stuff, just take it from the source - Mihaly Csikszentmihalyi has a TED talk where he explains the concept of flow.
]]>So, you have found yourself
at the bottom of the bottomless
pit of despair and doubt.
Again.
Don't worry, with time
you'll get used to the cold
and the numbness of mind
and the pain.
Rejoice! You've set foot
on a ground where
no human or beast
stepped before!
Now you have plenty of time
to rethink, to replan,
reconsider, recant, as all
your concerns are no more!
An optimist knows that things can always get worse, even when they're already bad. And when they are bad - how bad is that? Is it as bad as you thought it would be? Do you have the feeling that your concerns were exaggerated? And even if they weren't - don't you feel some form of relief anyway?
]]>Într-un articol precedent am comparat două interfețe de online banking din Moldova. Acea oferită de Fincombank era net superioară interfeței Agroindbank, pentru scenariul achitării facturilor.
De data aceasta voi evalua aspectele de uzabilitate și securitate a mesajelor de tip ”extras de cont” care vin regulat pe email, de la Fincombank (FCB) și Victoriabank (VB). Scenariul evaluat este găsirea răspunsului la 2 întrebări: „câți bani am în cont?” și „ce tranzacții am efectuat luna aceasta?”.
Înainte de a porni la drum, trebuie să clarific un detaliu - un email poate fi interceptat în timpul transmiterii de la un server la altul. Există diverse nuanțe tehnice care trebuie luate în considerație, dar pentru a simplifica lucrurile: ceea ce expediezi sau primești prin email nu este confidențial.
Așadar, să purcedem la lectură!
Așa arată mesajele de la FCB (screenshot, ca să vezi în culori).
Buna ziua, stimate Client!
La acest e-mail veti gasi atasat extrasul cardului Dvs.
Pentru a deschide fisierul dat, Va rugam sa utilizati ultimele 4 (patru) cifre a codului fiscal din buletinul Dvs. de identitate.
La fel, pentru a deschide acest fisier aveti nevoie de un program de dezarhivare. Daca nu aveti acest program instalat pe calculatorul Dvs., il puteti descarca gratuit de pe adresa http://www.7-zip.org sau http://www.7zip-ro.com/ro/ .Va multumim de interesul manifestat pentru produsele FinComBank S.A. si Va rugam sa adaugati adresa de e-mail in lista Dvs de contacte pentru a fi sigur ca scrisorile nu vor fi percepute ca spam.
Acest mesaj este transmis automat. Va rugam sa nu raspundeti la acest mesaj.
- FinComBank S.A. nu poarta raspundere pentru instalarea/utilizarea de catre Client a produselor soft pentru arhivarea/dezarhivarea fisierelor trimise. Responsabilitatea pentru alegerea si utilizarea unui anumit instrument apartine utilizatorului final.
Cu stima,
FinComBank S.A.
Добрый день, уважаемый Клиент!
В приложении к этому письму Вы найдете выписку по Вашей карте.
Чтобы открыть файл, используйте, пожалуйста, последние четыре (4) цифры идентификационного кода Вашего удостоверения личности.
Также для открытия этого файла вам необходима программа для разархивирования. Если, на вашем компьютере не установлена эта программа, вы можете скачать ее бесплатно по адресу http://www.7-zip.org или http://www.7zip-ro.com/ro/ .Благодарим за интерес, проявленный к продуктам FinComBank S.A. и просим Вас добавить наш e-mail адрес в список контактов, чтобы быть уверенным, что письма не рассматриваются как спам.
Это сообщение передается автоматически. Пожалуйста, не отвечайте на него.
- FinComBank S.A. не несет ответственности за установку/использования клиентами продуктов для программного обеспечения для архивирования/разархивирования отправленных файлов. Ответственность за выбор и использование конкретного инструмента принадлежит конечному пользователю.
С уважением,
FinComBank S.A.
Ce nu e bine aici?
Mesajul ne îndeamnă să vizităm un careva web-site și să instalăm o aplicație pentru a putea deschide fișierul atașat. Sunt câteva probleme:
Care a fost intenția folosirii arhivei cu parolă? Să protejeze datele? Să ascundă starea contului meu de ochii vicleni a ciberhoților?
Iată codul unui program care găsește parola în două secunde, încercând pe rând variantele de la 0000 la 9999. Nu în zadar în popor există expresia ”zece linii în cruce, parola se duce” :-)
from zipfile import PyZipFile
z = PyZipFile('extras.zip')
for i in range(0, 10000):
try:
z.extractall(pwd=b'%04d' % i)
except:
pass
else:
print('Password = %04d' % i)
break
Cu alte cuvinte, această măsură de securitate nu reprezintă un obstacol în calea criminalilor, dar e un obstacol în fața utilizatorilor. Aceștia trebuie să treacă prin niște pași adiționali ca să vadă starea contului lor, sunt împinși spre riscuri nenecesare, în timp ce banca ”nu poartă răspundere”.
Acest mesaj ar fi mai plăcut dacă era scris cu diacritice. În secolul nostru, chiar și un Tamagochi sau un ”999-in-1 brick game” poate afișa text Unicode, cu diacritice, umlauturi, accente exotice și emoji. E una când un adolescent scrie comentarii pe Youtube fără diacritice, dar e alta când o instituție serioasă face același lucru. Sunt curios să aflu, dacă româna din aceste mesaje e fără diacritice deoarece cuiva pur și simplu nu-i pasă de limbă, sau e din cauza îngrijorării că mesajul nu va fi afișat corect la unii clienți.
Bonus: cum sună româna fără diacritice.
Un mesaj adresat cuiva ar putea începe cu numele persoanei: ”Dragă Tractorin Prițăpovici, ...”. O astfel de personalizare îl face mai credibil și îl evidențiază pe fonul spamului, care deseori nu e suficient de sofisticat ca să știe numele persoanei, căreia i se adresează.
”Client” sau ”Vă” scris cu majusculă e o încercare de a exprima respect, dar aceasta nu se compară cu cele mai dulci cuvinte din lume: $firstName $lastName
.
O copie a textului vine și în limba rusă. Sunt clientul acestei bănci de peste zece ani și în această perioadă au fost multe ocazii să mă întrebe în ce limbă vreau să-mi vină mesajele, iar apoi să mi le expedieze anume în acea limbă. Textul lung distrage atenția cititorului și reduce probabilitatea că va fi citit în integritate. Și așa suntem bombardați cu zeci de mesaje și alerte pe zi, la ce ne mai trebuie o sarcină cognitivă adițională?
Serviciile de email oferă opțiunea de a căuta mesaje după cuvinte-cheie. Problema este că datele despre tranzacții nu se află în textul mesajelor electronice, ci în fișierele atașate, care sunt arhivate și criptate. Deci, informația din ele nu este indexată și nu poate fi găsită, decât printr-un efort manual.
Mesajele de la Victoriabank arată astfel:
În general, VB a echilibrat utilitatea și securitatea. Deși textul conține numărul contului și alte detalii, putem presupune că acele entități care sunt capabile să intercepteze mesajele de acest gen, cunosc deja unde am conturi, cine-mi sunt inamicii pe Facebook și cine m-a învățat să scriu cu diacritice. Mai mult decât atât, aceste mesaje sunt indexate și se supun căutării. Adică, dacă caut o tranzacție de 548 EUR de 3 ani vechime, în aplicația mea de email scriu ”548” și voi găsi mesajul. În cazul FCB - nu.
În ultimul exemplu, nu se transmite informație despre bilanț și tranzacții, ceea ce înseamnă că entitățile care pot intercepta mesajele nu știu despre conturile și sumele de bani de care dispun clienții.
Notă: acest articol este publicat într-o formă redactată.
Din data de 25 mai 2018 a intrat în vigoare GDPR (General Data Protection Regulation). Voi explica în termeni simpli, în baza unui exemplu, care sunt câteva din cerințele fundamentale, care trebuie satisfăcute pentru ca afirmația dată să fie justă. Ceea ce urmează, e bazat pe experiența mea de cercetare în domeniul usable privacy for IoT (Internet of Things) în cadrul proiectului Privacy&Us.
Înainte de a porni la drum, te atenționez că nu sunt un jurist. Povestirea mea e mai degrabă una inginerească, adresată programatorilor sau altor oameni care au tangențe cu elaborarea sistemelor software, care într-un mod sau altul "ating" date personale. În același timp, mă adresez și omului de rând, care vrea să fie informat despre ceea ce se întâmplă în societate. Pentru a verifica independent veridicitatea afirmațiilor mele, ești încurajat să consulți textul propriu-zis.
Unul din pilonii de bază a GDPR este "informed consent", adică "consimțământ conștient".
The basic requirements for the effectiveness of a valid legal consent are defined in Article 7 and specified further in recital 32 of the GDPR. Consent must be freely given, specific, informed and unambiguous.
De exemplu, dacă apeși butonul "Sunt de acord" când te înregistrezi pe un site, trebuie să înțelegi care sunt implicațiile acestei decizii. Aceasta, la rândul său, implică faptul că sistemul este complet transparent, iar utilizatorii știu ce se petrece cu datele lor.
În linii generale, asta se reduce la cunoașterea răspunsurilor la câteva întrebări cruciale. Răspunsurile nu pot fi îngropate sub un morman de hârtie, ci trebuie să fie la suprafață. Pe site-ul xxxxxxxxxx putem găsi doar unele răspunsuri:
Întrebare | Răspuns oferit pe xxxxxxxxxx |
---|---|
care date sunt colectate? | Presupunem că e adresa email, numele și prenumele, țara și localitatea, numărul de telefon. |
cu ce scop se colectează? | "Datele personale vor fi utilizate pentru xxxxxxxxxx xxxxxxxxxx" |
cine are acces la ele? | |
cât timp vor fi păstrate datele? | |
unde sunt păstrate datele? |
E clar că nu sunt toate răspunsurile pe loc, așadar nu poate fi vorba de consimțământ informat, cum prevăd canoanele GDPR.
Mai mult ca atât, ca inginer sunt conștient de faptul că atunci când browserul deschide un site, pe server se transmit și alte date, care nu sunt explicit declarate în acele câmpuri: adresa IP (tot se consideră „informație cu caracter personal”), tipul browserului (de exemplu, Firefox sau Chrome) sau sistemul de operare (Windows, Android, etc.), printre altele...
La prima vedere, aici nu este nimic suspect. Totuși, orice om care elaborează un sistem (nu doar programatorii, ci și managerii care îi organizează), trebuie să anticipeze unele scenarii negative. Să zicem, dacă într-o zi la putere vine un dictator care zice „hai să-i presăm pe vorbitorii limbii X”, îi va prinde bine o listă în care ai toate numele, numerele de telefon, adresele de email și limbile pe care le preferă browserul acestui om. Sau dacă lista asta ajunge în mâinile unor criminali, care se vor gândi de la cine să stoarcă bani în primul rând, le va prinde bine aceeași listă, în care scrie „negru pe alb” cine are ultimul model de iPhone. Sau altfel, dacă este prezentă și adresa ta IP în listă, le va fi ușor să-ți coreleze identitatea cu niște comentarii anonime (sau un pseudonim) de pe unele site-uri supuse lor.
Pe lângă toate astea, trebuie să înțelegi că astăzi justiția în Moldova este atât de pliabilă, încât e ușor să obții orice decizie, ca mai apoi cineva să pretindă că „extragerea acestor date de pe server a fost complet legală”. „Justiția” te va obliga să divulgi aceste date, în numele securității statului, iar dacă opui rezistență, vor găsi un articol, care după un pic de acrobatică mentală, va fi aplicabil asupra ta.
consent must be unambiguous, which means it requires either a statement or a clear affirmative act. Consent cannot be implied and must always be given through an opt-in, a declaration or an active motion, so that there is no misunderstanding that the data subject has consented to the particular processing.
În general, asta se rezolvă printr-o bifă separată, pe care o activezi ca să exprimi explicit acordul tău cu colectarea acestor date. Așadar, nu este suficient să adaugi o remarcă de tip „atenție, prin apăsarea butonului 'Înregistrare' tu ne dai acordul să preluăm datele”, trebuie să ai o bifă sau un buton separat prin care exprimi acordul cu colectarea datelor, și alt buton prin care zici că te înregistrezi pe site.
Imagineză-ți că ești un fermier din Porumbeni, care cultivează zarzavaturi, preia comenzi prin Internet și livrează produse clienților. Ești expert în agricultură, dar nu și în tehnologii. Când auzi cuvântul „server”, ți se năzare „sever” sau „север”.
Clienții tăi îți dau numele lor și adresa, că altfel nu le poți livra roșiile și vinetele. Ai rugat pe cineva să-ți facă un web-site, care este găzduit într-un data centru modern din Chiperceni. Când se înregistrează cineva pe site, datele care ți-au fost încredințate ție, fizic - sunt păstrate în Chiperceni; deși utilizatorii o făceau pe site-ul porumbeni-fresh.md, pe care figura numele companiei tale și era afișată fotografia ta. Cu alte cuvinte, omul care se înregistrează pe site, consideră că stabilește o relație cu tine, și nu cu un oarecare administrator de sisteme sau o întreprindere din Chiperceni.
În acest exemplu, compania ta (tu ești fermierul) controlează informația, iar data centrul din Chiperceni o procesează în numele tău. Așadar, tu faci ceea ce știi mai bine, iar ei fac ceea ce știu ei mai bine, și toți sunt fericiți.
Conform prevederilor GDPR, utilizatorul trebuie să cunoască cine procesează datele, și cine le controlează. În cazul specific xxxxxxxxxx xxxxxxxxxx despre care discutăm, noi nu știm cine sunt aceste entități. Cititorul atent va vedea, că datele sunt salvate pe serverele Google, deoarece pagina folosește serviciul Google Forms, respectiv Google e „data processor”. Va partaja oare Google datele cu persoane terțe? În ce mod ei protejează datele?
Articolul 16 spune că trebuie să existe o interfață, prin care un utilizator poate modifica datele personale pe care le-a introdus în sistem. Să zicem, dacă am scris acolo că mă cheama „Zorzonel Ariceli”, iar apoi am observat că din greșeală am scris cu un singur „L” (corect e „Aricelli”), trebuie să fiu capabil să rectific datele. Pe site însă nu există facilități de redactare.
Articolul 17 spune că sistemul trebuie să permită utilizatorilor să șteargă datele despre ei.
The data subject shall have the right to obtain from the controller the erasure of personal data concerning him or her without undue delay and the controller shall have the obligation to erase personal data without undue delay.
Site-ul nu oferă un formular prin care pot cere ștergerea datelor despre mine.
Articolul 37 afirmă că trebuie să fie numită o persoană responsabilă, căreia i se pot adresa utilizatorii atunci când au careva întrebări sau probleme legate de prelucrarea datelor personale:
The controller and the processor shall designate a data protection officer ... The controller or the processor shall publish the contact details of the data protection officer
Pe site nu se indică aceste detalii. Acolo se spune despre unele persoane implicate: xxxxxxxxxx, xxxxxxxxxx, xxxxxxxxxx. Cine din ei răspunde de datele personale? Toți? Nimeni?
Legea 133 privind protecţia datelor cu caracter personal, are și ea de spus câte ceva la această temă. Pe alocuri e aliniată cu GDPR și promovează idei similare:
Am evidențiat doar unele aspecte superficiale a ”aisbergului GDPR”. Tema este atât de complexă, încât deseori chiar și acei care ar trebui să înțeleagă toate nuanțele - nu le înțeleg (publicația poate fi descărcată gratis depe Sci-hub).
Este important ca acei care gestionează datele personale, s-o facă cu cap și cu grijă. Cred că cel mai bine a spus-o Boromir:
Am văzut că și afirmația despre respectarea legii locale poate fi pusă la îndoială. De fapt, aceasta ar putea pune în pericol toată operațiunea, din cauza unor „grave încălcări a legislației și a drepturilor cetățenilor”.
Abstract:
The novelty of the Internet of Things (IoT) as a trend has not
given society sufficient time to establish a clear view of what IoT is and
how it operates. As such, people are likely to be unaware of the privacy
implications, thus creating a gap between the belief of what a device does
and its actual behaviour. The responses collected in our online survey
indicate that participants tend to see IoT as computer-like devices, rather
than appliances, though there are some important misconceptions about
the way these devices function. We also find that privacy is a primary
concern when it comes to IoT adoption. Nevertheless, participants have
a propensity to keep using IoT devices even after they find out that the
device abuses their trust. Finally, we provide recommendations to IoT
vendors, to make their products more transparent in terms of privacy.
Abstract:
]]>We present a “privacy facts” label, which aims at helping
non-experts understand how an Internet of Things (IoT)
device collects and handles data. We describe our design
methodology, and detail the results of our user study involv-
ing 31 participants, assessing the efficacy of the label. The
results suggest that the label was perceived positively by
the participants, and is a promising solution to help users in
making informed decisions.