start	end	text
7820	16220	Um, when you leave this tent, if I could get you to exit through any other door, except the one
16220	21080	you came in through right there. Because people come in through that door, please leave through
21080	26060	any of the other doors. Thank you very much. Also, as you know, the tent is one hour behind.
26060	30940	All of the other speaker rooms are operating on schedule. If you want to see the next talk in
30940	35740	Apollo, I suggest that you start queuing a half an hour before the talk starts. If you're here
35740	40680	in this room, odds are you will be able to stay for the next talk. We haven't had to empty this
40680	47960	room all day today. That's all I have. Also, please don't take any photos during a presentation
47960	53840	at DEF CON without the consent of the speaker in advance. That's a new rule that's come to...
53840	60560	what? Oh, no photos of the crowd or anybody else unless you have consent of the people you're
60560	66540	photographing. That's all. Are you ready? Okay. Let's give a hand for Christian. Thank you.
69930	76410	Thank you. So I assume everybody here knows and loves encryption, but I think steganography is
76410	80850	much cooler because in that case, the adversary doesn't know not only what you're sending, but
80850	85750	also that you're sending a message at all. So it's in some sense much better. And what I'm
85750	89810	trying to talk about specifically today is, well, in steganography, you always have to have
89810	94450	some kind of cover message, the message the adversary sees that you're sending on the surface.
94790	99570	And what I'm going to use as the cover is natural language. More common covers are images and
99570	106810	sound, but we're going to use natural language here. Okay. So what have people done so far
106810	112590	for natural language steganography? Well, Peter Wehner, Chapman, and DeVita did something
112590	118650	where they essentially by hand wrote some context-free grammars, and then these context-free
118650	123490	grammars were to decode to natural language sentences, entire texts, and depending on which
123490	127690	productions you would choose in the context-free grammar, it would encode a different message.
127910	131770	The problem with that is obviously that you have to construct these large context-free grammars,
131770	136030	and both the sender and receiver have to have them. So one thing they did then, they
136650	141730	automatically extracted syntactic templates from text and essentially took the volumes of
141730	146050	Shakespeare and produced a grammar that would produce text that looked like it came from
146050	152810	Shakespeare. The problem is, it was semantically terrible. Syntactically correct, somewhat,
152810	158670	but semantically terrible. Chapman and DeVita improved on that by doing synonym placement
158670	164030	on existing text. So you would take some existing text and just substitute some of the words
164030	168130	in that text by synonyms. Synonyms are words with the same meaning, and thereby you get
168290	173490	a semantically, syntactically, coherent, and rhetorically correct text, except that you
173490	176690	have to come up with good synonyms, and you have to come up with this good original text
176690	182870	that you're going to substitute on. So there are lots of problems with these approaches,
182870	187250	and in particular with the synonym placement approach, you have things that are synonyms
187250	192970	in some contexts but not in others. For example, I can say, I eat a sandwich, I devour a sandwich,
192970	198090	but I cannot say, I devour. Devour requires a direct object. So a synonym is not always
198230	204890	a synonym. And of course, if you need this original text that you're going to do semantic
204890	209090	substitution on, if you use the same text twice, the adversary will say, wait a second,
209090	215110	I just saw the same text with minimal variations, and you're exposed. If the adversary can spot
215110	220190	the original text, well, differential text, or knowing discovered text. So these are problems
220190	223050	with the existing approaches prior to this work.
223750	228030	What do these problems really come from? Well, first of all, automatic generation of
228030	231790	cinematically and rhetorically correct text is very difficult on its own. If you ever
231790	236910	try to write a paper, it's hard for you. Now imagine how hard it is for a computer, especially
236910	241410	with all the synchronicities in language. What all of these previous approaches have
241410	247210	tried to do is they try to mimic correct text. And as in all steganographic approaches, you
247210	252610	have some kind of cover object that the adversary expects, and if you deviate from this expectation,
252610	256510	that's giving the attacker an attack vector. And if you're trying to mimic correct text,
256510	260570	well, you better produce really correct text, otherwise the adversary can possibly spot you.
261010	269010	So what we really want is something where incorrect text is OK. We want something where
269010	273710	the adversary, when he gets the text, doesn't expect that this text makes perfect sense,
273710	278050	is syntactically and semantically perfectly correct. Ideally, also, we can solve the other
278050	283350	problem, that if the adversary gets the original text or some database, he can't say, oh, this
283350	287350	other text should not exist. It's just a minor variation. It should exist together with
287350	293190	whatever you used to generate your cover from. And as I said, there should be errors in there
293190	297570	that we can exploit for steganographic hiding of the hidden message.
299470	304730	Well, I'm sure you've all read the title, so you know what I'm heading for. Here's some
304730	311230	example from Babelfish. Took a site from a German Linux camp site. In German it reads,
311230	315110	keine Sorge, sie sind alle handsam und beantworten auf freiwillig Fragengründen das Thema Linux
315110	319490	und geben gerne einen Klein-MIG-Innovator open source. OK, nobody understood that one, right?
320450	324090	If you translate this to English by hand, you get something like, don't worry, they're all tame
324090	327770	and will also readily answer questions regarding the topic Linux. I'm glad to give a small glimpse
327770	332890	into the world of open source. Now, if you feed this into Babelfish, I don't know, I assume
332890	336970	most of you have used this translation at some point or other, say on Heise or something,
336970	341990	you get a concern, it are all not handsome and also readily questions approximately around
341990	347330	the topic Linux and give gladly a small idea into the world of the open source.
349430	353630	OK, so first of all, the not is kind of in the wrong place. It's not a concern as opposed to
353630	359010	it's a concern that they're not tame. It didn't translate handsome at all because it wasn't in the
359010	363590	dictionary and it adds an article, the, in front of open source and I don't know why it does this
363590	368090	strange capitalization. But you can see there are plenty of errors in here and still, this text,
368090	373130	you might get some idea of what this event was about, right? So it's still useful for humans,
373130	376870	it's still perfectly plausible that somebody sends you this, say you don't speak German
376870	383950	and he sends you a rough translation. So, let's see. How does machine translation work?
383950	389130	Well, machine translation, first of all, there are lots of low quality encoders out there.
391490	396870	They can, there's never a perfect translation anyway, right? If you translate from one language
396870	400750	to the other, there are multiple variations of how you can express it in the target language.
400870	406550	So, if there is a variation in the translation, it's OK, even if you have a human translation
406550	412810	and even voiceless machine translation. What current machine translation systems do
412810	417750	is they are statistical. They have a language model, a translation model, which maps words
417750	423330	and sentences. They have some idea of syntactic and semantic rules, mostly do pattern matching.
423470	428110	They always ignore all of the context, so they look at one sentence at a time, at least all of the
428110	434610	ones that we found, which can have some pretty bad results. Say somebody talks about pipelines
434610	438750	and seals, and suddenly talks about sea lions in the middle of the translation, because the translation
438750	446970	picked the wrong word in the dictionary to translate seals. So there's plenty of errors in machine translation.
449870	453870	Now, one other thing I should say, even if these errors weren't there, even if machine translation
453870	457790	were perfect, as I said before, there's always some room in natural language, so we're not just
457790	463610	exploiting an error in current software. So, how does the basic protocol work?
463610	470310	Well, we assume that Alice wants to send a message to Bob, and, well, as usual, they have some shared secret.
470310	474810	In our case, what kind of specific translation engines they're going to use, and other things that define
474810	481110	the configuration of the system. And Alice first has to select some source text. And in our case, it can be
481110	485710	from a public news source, so you could just take text from BBC, the Bible, whatever you want.
485750	490570	You could write some on your own. It doesn't have to be secret for the system to work in general.
490570	494770	It can have advantages, as you'll see towards the end of the talk.
495450	501570	So, given this cover source text, the translator configuration, and the secret message, Alice gives all of this
501570	508830	to our tool, Lit, which, by the way, is available both as a PHP demo and in code at the URL at the bottom
508830	513890	of the slides. Don't go all there at once and try the demo. The server is a really, really slow machine.
513890	520050	It's processing PHP, and you'll just kill it. However, it works if you don't try it all at once.
522330	528570	Anyway, so Alice gives this to the Lost in Translation system, and as you would expect, gets back a cover translation.
528790	534190	She sends that cover translation together with either the cover source text or a reference to it to Bob,
534190	541170	and Bob just feeds his shared secret, again, the cover source text and the cover translation to his copy of the Lit system
541170	544570	and gets back the secret message. So far, so easy.
546730	551610	So how does the encoding really work? First, we take our cover source text and run it through several commercial
551610	557270	and custom-generated translation engines. In our case, since we weren't really up to the task of writing our own
557270	563730	machine translation software, well, we go online, we query Babelfish, we query Google, we query SysTran
563730	567610	and a couple of other engines that are out there and get back translations.
569350	572890	Then, after we get these translations, we want actually more than just two or three variations
572890	576970	because then the bit rate would be very low. So what we do is we add additional variations to the sentences,
576970	583230	making slight modifications that are presumably plausible for S.S. translation errors, possibly even fixing translation errors
583990	586450	and we get even more sentences out of that.
587790	595390	As we do so, whenever we add these variations, we compute probabilities that this is actually still a valid translation.
595390	604110	And at the end, once we have lots of sentences, lots of translations for a given sentence and probabilities,
604110	609870	we build a Huffman tree and then we walk through this Huffman tree based on the secret message we're trying to encode.
610550	614090	So the picture says more than I can speak into the microphone.
614490	620010	Again, cover source text goes into commercial translators, which ones are again selected by the configuration.
620010	622850	You can add new ones if you are so inclined to the tool.
622850	626270	Then we do some post-processing to get even more sentences.
627770	632610	Then we have some model that will tell us how likely are these sentences actually good translations.
632810	635050	Based on these probabilities, we build a Huffman tree.
635290	639470	And then based on the secret message, we select which translation we're going to emit.
639850	643790	We do this on a sentence-by-sentence basis because the translators work like that.
644930	650790	Eventually we either run off cover source text and cut the secret message or we run off secret message and pad with random bits.
651030	652090	Very simple, right?
652090	653670	Now what does the decoder do?
653670	655050	Well, pretty much the same thing.
655050	661130	Except that of course, at the end, we get the cover translation in.
661130	662490	We still built the Huffman tree.
662710	666550	And now we essentially go upwards and say, okay, which were the bits that were leading to the sentence in this Huffman tree.
666910	668410	And voila, we got our secret message.
669950	672610	To give you some idea of what the post-passes look like.
673270	674730	Some of them, very simple one.
675110	680410	What we found when we looked at translations, one of the things that are often wrong is that they pick the wrong kind of article.
680410	681930	In English, definite versus indefinite.
681930	683370	In German, the wrong gender.
684790	685490	And so on.
685490	687430	So that's one thing we can play with.
687430	691210	Or some words do not have an article, should have one and vice versa.
691230	692670	So that's something we can do.
694310	696230	Also prepositions are very tricky.
696230	698590	Should it be to, should it be towards, should it be from?
698970	700910	So we can play with them a little bit.
701350	707510	And again, we did some manual shuffling of what are prepositions that are close to each other that are likely to be mistakes.
708110	710630	And then that's where the probabilities come from.
711070	715550	And of course what you can do is if you have a dictionary that lists you how often a given word occurs in a language.
715550	720530	You can say, okay, this word is one of the ten million words that nobody ever knows.
720550	721830	So likely the translator didn't know it.
721830	724070	So we leave it in the original language even if it was translated.
724070	724830	Or vice versa.
724830	725930	We have it in our dictionary.
725950	726770	Babafish didn't.
726770	727210	Go us.
727210	728450	We can fix this error.
728990	732570	Right, so again you get two variations just by doing this little change.
732570	737570	And you can have in the archimetry additional ways for encoding information.
738750	742150	Another post-pass that I like very much is semantic substitution.
742310	746410	We talked earlier about synonyms and how hard they are to get and that you have to construct them by hand.
746470	753690	Now if we have a translation, this gives us a way to construct synonyms in a way that we call second-order semantic substitution.
754190	756890	So what we do is we have a German word, say, flach.
757110	761050	And the original machine translator translated it to say flat.
761430	763090	Okay, that's one choice.
763130	765830	Now if we look at our dictionary, we would have had other words.
765830	770130	Tabular, vapid, even, smooth, plain, plain, shallow, and so on and so on.
770270	774170	Now some of these are semantically rather far away from flat.
774330	776690	So we would not just pick a random one out of these.
776690	777370	But what can we do?
777370	779730	We can translate flat back into German.
780250	782170	We get flach, eben, and glatt.
782650	785090	So these are also again quite close now in German.
785530	787950	And if we translate these words now back into English.
788190	789670	See it's going back and forth here.
789670	794630	Then it says, okay, eben goes to even, glatt goes to plain, plain and smooth and so on.
794630	796990	So there's some of these words which kind of form a cluster.
797310	799950	A cluster that shows that they're semantically quite close.
799950	802070	And we can do that because we've got these two languages.
802410	806110	And now assuming that the original translator might have taken a little bit of context from the current sentence
806110	810590	and chosen a good translation in flat, we get good semantic substitutions here.
810790	815290	Now if the original translator chose badly, well, then we're not going to do much damage anyway
815290	816770	because it was a bad choice.
817010	818970	So it's again very plausible to do this.
818970	822850	And the number of witnesses you pick for the semantic substitution pass you can configure
822850	825090	and it's one of these configuration parameters.
825290	826850	Just like, do you want to use this at all?
830730	834030	And the tool itself, you can plug in new modules if you feel so inclined.
834030	837390	You just have to study machine translation, figure out what is actually a plausible error.
842230	844630	So I'm sure you all want to see what it looks like, right?
844970	847290	So let's take an original sentence in German.
847290	850410	In dieser Zeit soll festgestellt werden, ob die Schüler die richtige Schule gewählt haben
850410	852230	und ob sie ihren Fähigkeiten entspricht.
852270	852910	Oh God.
853210	857590	In Google, this looks like, in this time it is to be determined whether the pupil selected the correct school
857590	859890	and whether it corresponds to its abilities.
859950	861550	Quite a good translation, actually.
861990	866130	Now, LinguaTek, another engine that we're using, gives whether the pupils have chosen the right school
866130	869230	and whether it corresponds to its abilities shall be found out at this time.
869670	873110	If you use Lit, and this encodes 8 bits, so that's quite a bit of information,
873110	874730	quite a number of choices that we had here,
874730	878630	you get, in this time, it is to be determined whether the pupil selected the correct school
878630	881010	and whether it corresponds to its abilities.
881250	884790	That's not better, but it's not that much worse that you could say,
884790	886710	well, there couldn't be a translator which does this.
886830	891670	And yes, you might notice the closeness to Google, because in this case it selected Google as the basis.
891890	895710	But now assume you've got a couple of hundred translation packages out there,
895710	897990	and you don't know which one was chosen.
898350	900890	You don't have this comparison directly at hand.
900890	904750	Maybe we'll see later how we can even hide the original text, so you don't have that one.
904750	907190	You don't have the base translation, you just get one translation.
907670	910010	And you can say, yeah, well, maybe a human wouldn't have produced that,
910010	912350	only a first class in English.
912570	917310	But, hey, hard to tell that there was really something going on.
918370	919590	Give you another example.
919910	921490	This is from a film review.
921490	927710	Der marokkanische Film Windhorse erzählt die Geschichte zweier unterschiedlicher Generationen angehorener Männer, die durch Marokko reisen.
927990	931250	Auf dem Weg suchen sie nach dem einzigen, was ihnen wichtig ist, dem Sinn des Lebens.
931890	934810	Okay, I'm not going to read the Google and Linguatech translations.
935170	941790	However, what this gives us is the Marokkan film Windhorse tells a story from men belonging to two different generations who travel through Morocco.
941950	945850	They are looking for the only one which is important to them on the way, the sense of a life.
946370	948790	Now, the best translation would leave out the Ö.
949510	951970	Well, Google and Linguatech put a ö in there.
951970	954410	And actually, lit, as one of the choices, don't put anything.
954930	957510	Well, we included the string lit here, so we got this one.
957750	961110	But as you can see, it might even improve the quality of the given translation,
961110	963870	and at least it's not necessarily a significant difference.
966030	967710	So what are the advantages again?
967930	971010	We can hide information within the limits of machine translation,
971010	975750	and as machine translation improves, our system will also automatically improve in what it's generating.
976810	980850	We avoid this generation problem by mimicking the results of an imperfect transformation.
981210	983830	So we don't have to produce correct text.
983850	986570	We can get away with producing slightly incorrect text.
986710	991310	And what is also interesting, if you have a larger document with some rhetorical structure, we get that.
991310	993310	The translation gets the rhetorical structure.
993410	997490	If you use any of the other generation systems, well, if you're lucky, you get one sentence correct,
997490	1004770	but you're never going to get a large book or article correct that way, in terms of rhetorical structure and so on.
1005450	1010150	We have a secret key that can be used to configure the system.
1010370	1012110	And to that, you can have it very small.
1012110	1016390	You can just say, OK, I'm using Babel and Fish and Google and semantic substitution with two witnesses.
1016550	1017990	Or you can make it more complicated.
1017990	1022390	You can say, I've got this machine translation system, and it was trained on this corpus.
1022810	1024050	Machine translations are statistical.
1024050	1029830	So they are typically done in a way that you have some large parallel corpus of sentences in English and in German,
1029830	1033030	and the machine translation is supposed to learn what a good translation is.
1033390	1036070	And if you have a different corpus, you get a different machine translator.
1036250	1039610	So you can make this entire corpus part of your secret, if you so want to.
1040170	1042710	So you get lots of possible variations there.
1043670	1048550	And again, for now, we can also say that the cover text was from a public source.
1048550	1052710	You don't have to write a new one each time, take a new image, or whatever else you used to do in the cover.
1053730	1054970	What are the disadvantages?
1055390	1058390	Well, the bitrate is not really high still, right?
1059610	1065290	One of the big disadvantages of this text is always very robust compared to, say, binary data like images.
1065670	1070530	And as I said multiple times before, we need to transmit both the source text, or some reference at least to it,
1070530	1073150	and the translation for the decoder to work.
1074790	1077830	Well, let's try to address these two issues.
1083120	1085220	So what can we do to increase the bitrate?
1085260	1087680	Well, we can create more machine translation systems.
1088260	1094160	I'm sure the people who are doing machine translation will do that for us anyway, but that's one way of doing it.
1094860	1099700	We can, as I said, create new corpus to train existing machine translation implementations.
1099700	1100920	And that's actually quite easy.
1100920	1107520	If I've got a parallel corpus of 20,000 words, I can select any subset of this corpus and get another corpus.
1108020	1114300	So that's easy if I have the full source of a machine translation system and can train it myself.
1114900	1120260	And, of course, you can write additional post-passes or pre-passes that will make plausible modifications to sentences.
1122860	1126520	So what we've done so far is we have a prototype implementation.
1126680	1128880	And that, of course, means we have limited dictionaries.
1129080	1133500	We did not write anything that would give us knowledge about grammar or semantics of a language.
1133500	1136720	And we only have a couple of translation engines available to us.
1137120	1143040	Still, what we get is a bitrate of something like 0.082 bits per bit transmitted.
1144100	1145700	Now, this is for normal text.
1145700	1151520	If I just gzip the text, I get a much better bitrate, which is 0.022, which is a bit more aligned with...
1151520	1157040	If I take a PNG or JPEG image and hide something in it, well, I could compress this and get a bit...
1160860	1164700	Quickly, some minor variation that will become interesting soon.
1165360	1168900	We could use this scheme not only for steganography, but also for watermarking.
1169280	1174340	Often, watermarking and steganographic systems are related, so this is quite natural to do.
1175040	1180440	In watermarking, what we want to do is we want to be able to read some embedded mark from just the translation in this case.
1180440	1182560	We don't want to need the original text.
1183300	1184540	So, what can we do here?
1184700	1190960	Well, we could use some keytash of a certain set of sentences and take the least significant bit of that, and that's going to be our marked bit.
1190960	1201320	And essentially, when we pick our sentences in the translation, we're going to go through all of the sentences, compute all the keytash, and torture it until we get a sentence that actually gives us the marked bit.
1201320	1204680	Since we have lots of variations, we would statistically succeed most of the time.
1207140	1211240	And of course, we use multiple sentences if we need multiple marked bits.
1212060	1213760	Which sentence are we going to pick?
1213780	1219600	Well, we could just have some other secret mechanism that gives us sentence 5, 10, 17.
1220960	1224140	Or just at the beginning, but this makes the watermark kind of fragile.
1224140	1227840	The adversary could just insert a sentence at the beginning and suddenly all of our offsets are wrong.
1228160	1238320	What is a better technique is to say, we have some arbitrary mechanism to rank sentences, all of the sentences in the translation, and that just gives us some total ordering.
1238320	1244800	We take the sentences that have the scores lowest on this ordering, and the sentences after that in the document are the ones that are going to hold the marked bits.
1244980	1248820	This way, an insertion or deletion attack will not necessarily succeed in destroying the mark.
1253480	1255880	It wouldn't be DEF CON if we didn't have some attacks, right?
1256260	1257800	So what can we do about attacks?
1257940	1262180	Well, first of all, there is the possibility of somebody spotting obvious inconsistencies.
1262180	1269480	The most easy one that comes to mind is, say you've got a translation which in the original text contains the same sentence twice, and you translate it in different ways.
1269680	1271300	A machine translation would never do that.
1271760	1275100	It's a deterministic machine, and now suddenly it does it not.
1275360	1278100	So, that's in some sense a simple bug.
1278100	1285340	In the LIT system, you just have to keep track of which sentences have you translated so far, and if you see the same sentence again, well, you're not going to use that to encode anything.
1285340	1287760	You have to omit the sentence you omitted the first time.
1288220	1295600	Similar, there are certain mistakes that machine translators make, like translate the plural of foot as foots.
1296040	1297860	Should be feet, obviously, right?
1298860	1306080	If you pick two different machine translators, where one makes this mistake and the other one doesn't, and you alternate between them, you get inconsistent mistakes in your translation.
1306080	1314620	And the reader will wonder, okay, so a human might make this mistake once but not another time, but a machine translator should make mistakes consistently.
1314680	1317180	So that's another possible source of bugs.
1317900	1324120	Which you would fix by, obviously, writing some kind of post-pass or processing that makes sure that these don't happen if you can spot them.
1324120	1336740	In general, essentially one problem that most steganographic systems have, somebody could construct a new statistical model that says all of the translation systems in the world obey this model, except for this one.
1336860	1341780	That applies the same to image steganography or something with audio files.
1342100	1345420	Somebody has a model, and you deviate from it, and you shouldn't.
1345420	1346860	How can you defeat that?
1347020	1352620	Well, let's assume, just for fairness, that we also know about that model.
1352620	1360240	If we know about that model, we can easily make our encoder aware of that model by sorting out sentences in the translation process that don't obey the model.
1360420	1362240	And then we can't be detected anymore.
1362880	1370800	What is interesting is that creating such a model is in some sense equivalent of improving statistical machine translation because, well, what is this machine translator?
1370800	1373920	It is a model of how one sentence corresponds to another.
1374700	1376480	And in the end, it's an arms race.
1376480	1378160	Whoever got the better model wins.
1378160	1386140	If the attacker and the defender have the same quality of machine translation model, then the defender will win because the attacker will have to say, oh, it's plausible.
1389560	1391460	Finally, the most fun part.
1391460	1395660	How can we avoid transmitting the original document for the system?
1396860	1399880	Remember the least significant bit ID for watermarking?
1400440	1404500	Now, what if we take H bits in each sentence?
1405340	1411220	The first H bits that tell us how many of these least significant bits in the hash are going to actually contain a message.
1411960	1414720	So, I'm a sender, some receiver.
1414820	1416220	We have some small constant H.
1416220	1422960	When I pick my sentences, I try to pick one where the first two bits, say, encode the number one.
1422960	1424580	That means I'm going to transmit one bit.
1424580	1427700	And then the third bit is going to transmit the actual message bit.
1427700	1435120	Or, if I have more variations available for this given sentence, I could transmit one where it has the first two bits set, meaning the number three,
1435120	1439100	and then follow three bits in this least significant hash that contain the actual message.
1439600	1447520	This is a statistical way, just based on the fact that hashes are pseudorandom, that I can encode the message by just transmitting the translation.
1447980	1455460	And, well, I might fail to find one of the translations in the variation that allow me to encode this,
1455460	1462120	but I'm unlikely to fail, statistically speaking, depending on my choice of H and how many translations I've got available for a given sentence.
1462660	1469700	And, well, since I can assume that I will fail eventually, what we can do is just add forward error correction to the scheme,
1469700	1473140	and then we can correct these errors that are statistically bound to occur.
1476900	1477780	Conclusions?
1480880	1485300	Translation-based steganography is a promising new approach for text steganography, in my opinion.
1485300	1490060	The bitrate that we can achieve is lower than that of systems that operate on binary data,
1491300	1501240	but we have the advantages, and we can defeat statistical attacks if the underlying machine-translating model the attacker is using is made public to us.
1504360	1505480	Questions?
1508730	1510450	Can't have no questions.
1523770	1526570	I give the slides to the DEF CON goons.
1526570	1530170	They are... I can put them on the website, obviously.
1532450	1540170	And there is a paper at Information Hiding Workshop 2005 which also describes the scheme, except for this last bit with the forward error correction.
1541550	1541750	Yeah?
1549000	1554940	Okay, so the question was if we intend to add support for languages that don't use the Roman character set.
1554940	1560200	Yeah. Well, as soon as we get... I mean, the system itself uses Unicode.
1560280	1564840	So if you give us a translation system that translates English to Chinese, you can use it.
1564840	1568880	The problem is, if you take languages that are not inter-European anymore,
1568880	1575640	the distance between the languages is so big that existing machine translation systems just cannot cope with it anymore.
1575640	1582900	You just get total garbage, and it's no longer plausible for someone to send a translation of a Chinese document to English that is total garbage to someone else.
1582900	1589420	The system would still work, but you lose the plausibility because you need a certain level of correctness of the machine translator to make it plausible.
1601160	1603480	Okay, how do we detect tampering in the message?
1603480	1604480	Well, we don't.
1604680	1606260	This is a steganographic system.
1606260	1609020	Typically, the goal is not to detect tampering in the message.
1609540	1614280	You could, of course, just add a hash at the end or something or sign the resulting message.
1614420	1616700	But the idea is the adversary doesn't even know that you're using it,
1616700	1622920	so that the adversary tries to actively disrupt your communication is something that's completely out of the goals of steganography.
1640520	1644800	No, it does not use symmetric key cryptography. There's no cryptography involved here at all.
1647100	1651100	The shared key... we assume it's transmitted out of band up front.
1651100	1653440	By some means, we don't care.
1654000	1657120	We just assume it exists. The two parties have it at the beginning.
1657180	1661620	They have to know that they're going to use steganography anyway, otherwise the guy probably wonders why he gets this translation.
1664910	1668230	No, we don't care about public key infrastructure or anything like that.
1677430	1678610	No more questions?
1682220	1686820	Okay. Well, I originally told the DEF CON goons that I would give a half an hour talk and they gave me a one hour slot.
1688700	1698540	So, however, what I can do very quickly is very, very quickly talk a little bit about some other project of mine that the DEF CON goons didn't want to talk about.
1698540	1704820	I don't know if you've heard about Glunet. It's a glue peer-to-peer framework.
1705140	1711660	Just like Phenet tries to do anonymous file sharing with running on Linux, BSD, Solaris, and so on.
1711660	1714560	It's written in C code, so portability is not as given.
1715920	1720160	Goals, as I said, anonymity, confidentiality, so all of the transactions are encrypted.
1720760	1726500	Deniability, you're supposed to not... even if I break into your computer, you should be able to say, I didn't have these files on my machine.
1726500	1730220	We're trying to make economic sense that people have incentives for sharing.
1730220	1731740	And, of course, it should be efficient.
1732480	1740760	And, very quickly, the upcoming, hopefully this year, 0.7 release will have a very nice plugin architecture.
1741060	1745440	We can have transport so we can send either fragments like UDP or streaming.
1745840	1747960	We'll have improved resource accounting.
1747960	1751840	We can have, as Ian Clark just said earlier, a friend-to-friend or a peer-to-peer topology.
1751840	1753140	You have the choice.
1754160	1758080	Cryptographic-wise, we use AIS, SHA, and RSA.
1758680	1764680	And if you want to look at the new nice features in file sharing, look for the cryptography behind k-blocks.
1764760	1770240	We can associate arbitrary metadata with files so you can have ad descriptions to your search results.
1770260	1776040	Or, in particular, previews so you can see before you actually download the file some preview of the contents.
1776720	1780580	We get quite a big speed-up from using 32k blocks.
1780580	1783940	And we have a nice, shiny, new, blade-based user interface.
1784800	1788180	We're currently at pre-5. I hope the next one will be 0.7.0.
1788980	1792920	And if you care to learn more about GNU Net, this is the information.
1793340	1797760	I see us as a friendly competitor to Freenet, which you've heard about just before.
1800320	1801120	Questions?
1805100	1807180	Right, yeah, that was one of the things, right?
1807180	1809160	Can you use steganography with GNU Net?
1809840	1812740	Theoretically, yes. We've got this transport-layer abstraction which essentially says,
1812740	1816400	okay, if you can send smoke signals to the other guy, we can transfer messages.
1816540	1819220	The problem is, look at the bitrate again.
1819220	1822100	If you want to do peer-to-peer with that kind of bitrate, you have a first problem.
1822100	1826200	The second problem is, the steganographic encoder is quite, quite slow.
1826480	1831700	So, not only would you use extreme amounts of bandwidth, but also your CPU is just going to crash and burn.
1832260	1836880	And the third problem is, you need this shared secret and these machine translators in the background.
1836880	1844360	And usability-wise, we want to go for a slightly larger user base than the people who would actually be capable of setting this thing up.
1845260	1850480	Oh, and LIT is written in PHP and GNU is in C, so there would be some bridging code that would be also non-trivial.
1850800	1853980	So, theoretically, yes. In practice, no.
1857440	1863680	And besides, why would you want to do anonymous file sharing if you use steganography so nobody even knows that you're transmitting anything?
1871360	1872680	No more questions?
1873500	1877180	Okay, well, if you want to see me in private, I'll be somewhere outside.
