Bitcoin Forum
May 28, 2024, 05:10:00 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 2 [3]
41  Economy / Marketplace / Re: World's FIRST Bitcoin Lottery! on: June 12, 2010, 09:46:37 PM
I had an idea of making a 6/49 lottery. My concept was simple: You enter the website, choose the numbers on the ticket then the sistem PGP signs your ticket. Every Sunday the system extracts the 6 numbers out of 49 ( I even considered buying a small piece of hardware that would choose for those 6 numbers and put a live video feed)

Hm, PGP signatures are a good idea. I'd still use the numbers from an already established system though, so you needn't bother with generating the numbers yourself. Coincidentally that'd also prevent you from cheating.

Speaking of which, what prevents you from just buying ten thousand tickets for yourself at no cost? ;-)



42  Bitcoin / Development & Technical Discussion / Re: Can't Build r80 from SVN on: June 05, 2010, 04:36:11 PM
Is anybody else experiencing this bug?

Also, I'm somewhat disappointed. -O2 didn't help me generate hashes any faster. Perhaps I'll try -O3.

Yeah, I had the same problem.

BtW: If you look at the makefile, sha.{h,cpp} are already compiled -O3; using a higher optimization level for the remainder of the program is probably not going to help much.
43  Bitcoin / Development & Technical Discussion / Re: Website translations on: June 03, 2010, 11:24:49 AM
Here's the German translation for the client.

It may require some modification, because, on average, German sentences are a third longer than English ones and thus may not fit the available space. Also, I couldn't test the access keys (e.g. E&xit) properly, so I may have introduced collisions there...
44  Economy / Trading Discussion / Re: For a website taking payments with bitcoins, better: IP or bitcoin addresses? on: May 31, 2010, 01:06:33 PM
Sure does, that's what a certificate does: Hey! You're on www.somewebsite.com and the data is crypted.
The question is that, imagine somewebsite is meant to be at 123.123.123.123 and someone else spoofed DNS for it to resolve to 123.123.123.124, then your browser will believe it is at www.somewebsite.com - even if it's phishing.

How would the attacker get hold of a valid certificate that claims it's for www.somewebsite.com without actually controlling said domain?

Quote
And for free certificates, they might include the security they want, but no browser recognizes their root CA's, so it makes them as worthable (and will raise the very same alerts) a self-signed certificate.

Not necessarily. StartCom, for example, is recognized as a valid CA by almost anyone (Opera being the exception). CACert ist also included in popular Linux distributions (e.g. Debian).

Quote
DNSSEC is yet another piece of junk. That probably would never come to be nothing but a project. Issues of practical life, negociating crypt algorithms reduces performance and DNS is a really heavy duty service. So, if someone tries to implement DNSSEC as a standard, internet would probably become as slow as Tor is.

Ehm. DNSSEC _is_ a standard, and the root servers and many TLDs are already using it, although it will only become fully functional later this year. It's true that it is not as efficient as it could be (and was rightly criticized thus by people like Daniel J. Bernstein), but with .com, .net and .org adopting it within the next year or two, I'd pretty much say it's a done deal.

Quote
And if someone doesn't want the one he's paying to to know his address, probably the person that's receiving the payment doesn't want to show his address either. Therefore they simply DON'T use DCC Pay, but P2P Pay. Easy... as long as both options are there.

Well, I was working with the premise of IP payment, because that's what you brought up in the snippet I replied to with that paragraph. Of course you can just use a Bitcoin address (unless the payee wants you to pay DCC-style...)

Quote
I'm up to choices not to paranoia. Paranoia in security isn't of any value add, paranoia is just that... paranoia. Reduces life quality, grants nothing and prevents people from live.
Yes, someone may steal your data, as someone may steal your wallet on the bus with the very same outcome. There're some security elementals, but you can't keep looking over your shoulder (specially because you probably will miss to see the electrical post in front of you).  Grin

^^

The thing with security is that you have to be aware of what _could_ happen. I don't walk around with 1000$ in my wallet, precisely because it could be stolen, for example. If Bitcoin becomes an accepted currency, attacks *will* happen -- just think of all the phishing that's going on with Paypal and normal banks. If there's a way, it will be exploited by criminals.
45  Economy / Trading Discussion / Re: For a website taking payments with bitcoins, better: IP or bitcoin addresses? on: May 31, 2010, 09:06:54 AM
As for the attacks on websites with BC addresses, you may deface them, and you may spoof even without the server's Private Key. Normally people don't look to the CA, so as long as the CA is recognized it will ring no bells - and within this "world", specially for Tor users, Verisign Certificates aren't the normal thing, but CACert and other free services alike (means also many users are already used to press "Continue" on invalid certificate flags).

I'm by no means an expert on this, but I think even a free certificate includes a "this is for website www.example.com"-field, and you can only get a certificate if you actually control that domain (can receive email sent to the domain), so I don't think forging that is trivial. Firefox, for example, explicitly pops up a warning if a certificate is for a domain other than the expected one.

The remaining weak link then is DNS, but while possible, it is non-trivial to forge that, especially when you're watching the destination-page, and can't know who is going to want to visit it beforehand. Also, DNSSEC is slowly becoming the norm, so that possibility also goes out of the window within a few years.

The reason why I bring up TOR is that bitcoin complements it very well. TOR preserves anonymity, and bitcoin allows for anonymous transactions.

Quote
Edit:
To not mention the obvious: If you know the destination's IP Address why on Hell you would need to use Tor to pay?? And if the address would be something like <some unreadable hash>.onion then you wouldn't need SSL, because inner Tor data is already crypted.

Suppose someone doesn't want to know the payee who he/she is? Without TOR the IP address is revealed, which, at the very least allows the other party to know the approximate geographical location.
46  Economy / Trading Discussion / Re: For a website taking payments with bitcoins, better: IP or bitcoin addresses? on: May 30, 2010, 07:13:20 PM
MiM attacks that can perform defacing can perform it on all the ways - with or without SSL. Like spoof your DNS and make your browser believe to be seeing the "right page".

Actually, gavinandresen raised a very good point here. For example, when browsing over TOR, a malicious exit node could indeed replace bitcoin addresses very easily. Contrary to what you said, SSL would fix the issues raised, because when the content is hidden, the attacker can't even know whether there is a bitcoin address on the requested page at all, much less replace it. Spoofing DNS would also be detected because the certificate wouldn't be valid (unless the attacker managed to spoof an SSL certificate, which is still very very difficult).

The thing to note here, though, is that the bitcoin client itself can't do anything about all of this, only the websites that use Bitcoin can -- and, for example, bitcoinmarket and bitcoinexchange already do.
47  Economy / Marketplace / Re: BitCoin Casino (Beta mode) on: May 28, 2010, 09:01:11 AM
What do you mean use bitcoin cents as sign?

I think he meant that you could replace the $-signs with ฿-signs. That's the currency-symbol the community adopted for bitcoin. I think it's using Unicode though, and the website does not declare the required content encoding currently. Changing that could be as simple as adding a <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> header, but it might be more difficult if the database depends on the encoding somehow.
48  Bitcoin / Development & Technical Discussion / Re: Website translations on: May 27, 2010, 10:06:29 AM
I'm done with the FAQ, it's attached to this post. I've also attached the front_page again, because the "Advantages:" before the list of bullet points needed to be in its own paragraph (I assume from the structure of the files that three blank lines serve as paragraph-break in whatever  CMS is used for the homepage).
 
I'll also take a look at the .po-file, but it'll probably take a few days.
49  Bitcoin / Development & Technical Discussion / Re: Tracing a coin's lineage on: May 25, 2010, 09:29:05 PM
It's good that someone is thinking along the lines of how security/anonymity could be compromised.

Yes, you know both sender and recipient of a payment. The recipient's key is always included, and from there you can trace the coin back to the previous recipient, i.e. the current sender.

My 2฿ worth of thoughts:

Ideally the Bitcoin wallet should be encrypted, and future versions will implement that. Now, leaving malware out of the picture (which would probably just send all bitcoins to the hacker in question instead of tracing transactions back), when both your computer is confiscated and you are forced to reveal the password, you're probably already in big trouble... you'd have to already have screwed up other than by using bitcoin in an unsafe manner. Personally I don't worry about this, but it is good that somebody does.

As an aside: Bitcoin can be used over the TOR network, so one can hide one's IP address. There are also the web-based wallet services, which might make it harder to trace a transaction that went through them. On the other hand, they could do some tracing of their own... The deciding factor here is which coins are chosen for which transactions.

As for coin lineage, yeah, that might be a problem. Currently it is a best practice to give out a different address to every sender, and only give it to them. An outside observer you can't know if the next recipient (or rather crypographic key) the coin is sent to is one of your aliases or someone else entirely. Bitcoin Currency Exchanges (or any high-volume user) might be a problem here, but otherwise one probably doesn't have enough data to infer much about the transfers, it just becomes untractable if every person has a lot of different addresses. One additional point here is that old transactions expire after a while, and the space is reclaimed -- that wouldn't stop a serious attacker, but it's helping a little.
50  Bitcoin / Development & Technical Discussion / Re: Website translations on: May 25, 2010, 09:15:52 PM
My pleasure. Smiley

I've fixed the problems SmokeTooMuch mentioned (thanks!) in the attached version. I also should have the FAQ translated soonish (first draft is done).

We also might want to update the numbers. Even though the FAQ explicitly states that it dates back to October 2009, claiming 500 generated Bitcoins per day as achievable amount might give rise to disappointment.


51  Bitcoin / Development & Technical Discussion / Re: Website translations on: May 24, 2010, 02:44:08 PM
Even though I've started using Google's Tools now, it would probably be a good idea to put all of this under version control. That'd also make it easier to see when the original page changes and you need to update the translation. I especially like how http://whygitisbetterthanx.com/ does it -- with one branch per language in a git repository (see bottom of page).

Edit: Bitcoin front page is done. Would be good if someone else could proof-read it though. SmokeTooMuch?
52  Bitcoin / Development & Technical Discussion / Re: Homepage language on: May 24, 2010, 02:20:43 PM
that reminds me of my intention to do a german translation ^^

Eh, me too... this post finally got me started, actually. I'm using Google's Translation Toolkit, so if you want in on the fun, PM me with your Google account name, and I'll invite you to contribute to or comment on the translation.

53  Bitcoin / Bitcoin Discussion / Press coverage on: May 24, 2010, 01:19:02 PM
Hi!

It appears that bitcoin was mentioned in a (semi-)notable publication for the first time (as far as Google would tell me): Open source innovation on the cutting edge (InfoWorld). I don't think they really conveyed how the system works, but I think it's another sign that Bitcoin is gaining traction.

Congratz, Satoshi!  Cheesy
54  Bitcoin / Development & Technical Discussion / Re: IRC Client on: May 21, 2010, 03:46:51 PM
Erm. I don't think this is a good idea. If someone wants to chat about Bitcoin on IRC s/he can just fire up a normal IRC client and visist the Bitcoin channel on freenode: irc://chat.freenode.net/bitcoin (Edit: Apparently the Forum doesn't like non-http URLs...)
55  Economy / Marketplace / Re: We accept Bitcoins on: May 19, 2010, 07:52:42 PM
Can I just butt in with a question on why that is? To me it seems that if Bitcoin uses public-key cryptography to transfer ownership of the coins, it should be a trivial matter to include a short message that is only readable by the recipient.
56  Bitcoin / Bitcoin Discussion / Re: Proof-of-work difficulty increasing on: May 11, 2010, 09:50:51 PM
The way I understand it, since the data that's being hashed is pretty much random and because the hashing algorithm exhibits the 'avalanche effect' it probably doesn't matter if you keep starting with 1 and incrementing it or if you use pseudo random values instead, but I was wondering if anyone could support this or disprove it.

Yep, your understanding here is correct. It does not matter what exactly gets hashed, and no, you can't cheat without first breaking SHA-256, which is considered difficult.

The salient property of cryptographic hash functions is that they are as random as is possible while still being deterministic. That's what their strength depends on -- after all if they weren't random, if there were obvious patterns, they could be broken that way. So the ideal hash function behaves just like a random number generator. It does not matter what you feed in, timestamp or not, whatever's put in there, the hash should still behave randomly (i.e. every possible outcome has the same a-priori probability of occuring). Incrementing by one works just as well as completely changing everything every step (this follows from the avalanche property). However, the initial value, before you start incrementing, must be (pseudo-)randomly chosen, or every computer will start at the same point, and the fastest one always wins, which is not what is wanted here.
57  Bitcoin / Bitcoin Discussion / Re: Is there a white paper on bitcoin? on: May 04, 2010, 08:15:26 PM
Hi! Welcome aboard!

Have you read the FAQ yet? Among other things it has a link to the Bitcoin whitepaper. The minutiae of the protocol and inner workings are, unfortunately, only "documented" in the form of the application's source code.

The basic idea is that coins are signed cryptographically, so you can only spend coins you actually own. To spend a coin you sign it over to someone else using their public key -- the address is a signature of that key and serves to identify it.

To prevent you from making a copy of a coin and spend it twice, the clients form a P2P network that records which coins have already been spent in a long chain that is linked by hashes (see the paper). The IRC channel merely is a relatively simple way to get the IP addresses of a few other participants, so you can join the network.

Apart from recording all transactions, the hash-chain also serves as a sort of distributed clock that makes sure you can't alter past transactions or create many new, bogus ones to DoS the system. To make a new block valid, the clients have to twiddle a nonce inside a block until the block's SHA-256 hash is below a target number. The target number is adjusted about once every two weeks to adapt the difficulty of generating a valid block to the computing power of the network -- basically this ensures that a valid block of transactions is generated about six times per hour, no matter how many or few people are participating.
58  Bitcoin / Development & Technical Discussion / Re: URI-scheme for bitcoin on: May 02, 2010, 11:13:09 AM
Karmicaids, thanks for taking the time for such a detailed reply.

It seems there is, as it just so happens, an existing protocol precisely for interacting with stored data files on freenet  Grin <YAY!> Grin

Oh, I thought you meant that when you spoke of using freenet. The user runs freenet and Bitcoin would communicate with it using its control protocol. However, running Freenet requires considerable computer resources, especially bandwidth, and personally, I do not want to run a freenet node for that reason alone. That's why I wanted this to be optional.

Quote
I hope I didn't give the impression that I either intend to use magnet links without more consideration of/ agreement with others, nor that my provisional support for them is based on their existing popularity.

I had the impression that you did not want to re-invent the wheel, and that's why popularity played a part -- that the existing acceptance of magnet links in other software was a plus.

Quote
Quote
Magnet links were designed to reference a file or set of files on peer-to-peer networks, and as such all well-known parameters refer to files (file name, size, etc.).

Sorry DataWraith, but with all due respect, I have to disagree. The first issue is that files on a hard drive are mapped to a hierarchical namespace of nested locations, i.e. domains and directories. The fundamental difference, in approach of the many P2P networks is that the namespace is not hierarchal and the data it supports is referenced not by address but by the uniqueness of it's content. Whether the target is a file or anything else it's not referenced by a specific fixed address, but by the identity of it's unique contents. Identical files, are essentially the same identity and the P2P application can use multiple instances as multiple feeds to the same item. The parameters of magnet are well suited to any P2P application.

Okay, sorry, seems I haven't made entirely clear what I mean here. I'm aware of how magnet links refer to content, rather than a location in a hierachical namespace.

Perhaps it's just a difference of mental models: For me, a bitcoin transaction is, for lack of better words, not a thing so much as a process. In my mind, magnet links refer to things (usually a file -- whether by content hash or by location), and trying to use them to refer to a process strikes me as a little awkward. Magnet links identify things you then have to go fetch, while a bitcoin transaction is completely described by the link itself (although you still have to say "Yes, send the coins." once you click the link).

To me it seems that using magnet links would be to (ab)use them for something they were not meant to describe, as they orignated as a replacement for ed2k://, freenet://, et al., describing how to get a file.

A bitcoin-link should be more like mailto: than magnet: IMHO.

Quote
Well actually it's a URN handler and I didn't specify any limit to the 'weight' as you put it.

Yeah, my mistake, sorry.

Quote
In any case I am only contemplating this, in the hope it can be done without installing freenet, at least the chunk of code needed to read and write to and from freenet should be much smaller if (as I suspect) the whole freenet web server is not needed.

IIRC the web server is pretty much integrated into Freenet itself. You can use the simpler FCP protocol to talk to a Freenet instance, but because of the type of content on Freenet, not many people are willing to host a publicly accessible instance, so you would have to run your own. I don't begrudge that you want to be able to do this, I'm just not willing to do it myself. I'd much rather host a TOR hidden service -- that's why I suggested to use a general, full-featured URL as the details parameter, instead of making it freenet specific.

Quote
Quote
    * address: An address to send bitcoins to. Since one can hand out different addresses to different people, this can also define the sender.
    * amount (optional): The amount to send.
    * message (optional): A short message that describes the transaction (same as the field in the Bitcoin client)
    * details (optional): An encoded URL with further details of the transaction. For a purchase in an online shop, this could link to the details of the purchase for example. Since this would be a full-featured URL in itself, you could also link to freenet, i2p and tor to keep things anonymous.

Not sure what you mean by address, other than the 'address' that is provided by your bitcoin signature (which is more like a name than a place). I cant see how you can hand out different addresses to different people, unless you already have some aliases defined. So you are suggesting an added naming system to encode and translate aliases for a bitcoin node, is that what you mean? That could be done without too much hassle I suppose.

Well, yeah, I meant the bitcoin signature. I called it address, because that's what it says in the bitcoin client (i.e. "Change your address"). I indeed thought that one should use different aliases, just like the exchange sites currently do: You get an address (or signature, or whatever) to send coins to, and because that address was only given to you, the recipient knows the payment is from you.

A system to translate aliases would of course be nice, but I think that's better handled with an address book or mybitcoin.com or something.

Quote
Message: This is where URI data becomes unwieldy. A message is implicitly a useful amount of human communication, which was never intended to be delivered in the URI itself. If the receiving party wants to communicate some text, then they can do so in the document they are publishing (IE. where they are publishing the link). The text for the sending party, can use the normal route, as the link invokes the bitcoin interface and that provides the field to include a note. What message needs to be passed by the receiver (payee) that is not possible in the document in which they are publishing the link?

Yes, exactly! The text for the sending party can use the normal route. But what if I want to pre-specify the text that should be sent?

This has an analogue in mailto:-links: If you want someone to send you an email, you can also specify a subject he/she should use: mailto:alice@example.org?subject=Test. So if I am selling something on, say, ebay, I can give the buyer a bitcoin link that includes the message "Payment for Ebay auction #12345", so he/she does not have to enter it themselves, possibly making a mistake if the code is more cryptic than #12345.

Quote
Details: I advocated from the outset, the desirability of the URI scheme, being able to reference a document with a richer data structure, that can be used to embellish upon the basic essential information passed by the obligatory parameters. I also suggested a proposed repository for those documents which lead to some accessibility issues, but if solved would enhance the anonymity of the bitcoin node and circumvent the reliance on non-P2P or hierarchical namespace. The possibility of taking a beautiful network addressing protocol and remapping it with (or kludging it onto) a regressive, inferior, butt ugly one, which requires all entities to adopt the analogy of a fixed location, and loose all hard wired associations if they are shifted, seems to me as tactful as giving a beautiful stone building a coat of cheap plastic paint; bright green paint. A URL for a parameter, Is precisely the kind of butchery I would rather avoid, because a URL is not a URN and the namespace it addresses, is hierarchical and must ultimately reside at a fixed IP.

Sorry, I mistakenly tend to use the terms URI, URL, etc. interchangeably because you enter it into the address bar %). Again, sorry if this lead to confusion.

What I wanted here was to make this additional information general. Some examples might clarify this:


The creator of the link chooses where to put the additional details, and the recipient decides whether he needs the supplemental information badly enough to install Freenet/Tor/I2P. That's one of the reasons for including a short message in the link itself: the additional information should not be critical to the transaction.

Quote
As far as this "you could also link to freenet, i2p and tor to keep things anonymous." is concerned, you clearly haven't given it much thought. If I could just link to freenet, then I could just as easily incorporate freenet as the actual repository referenced in the URI to begin with.

But wouldn't that make the use of Freenet mandatory? I would like this to stay more flexible.

Also, if I were to run an online shop, I'd rather have people look the details up on my own website rather than them having to install freenet. That might also link my shop's reputation with Freenet, which given Freenet's reputation, might be undesirable.

Quote
That's the problem. You can't just store files on freenet, and expect anybody to be able to retrieve them with a URL or a URN, on a regular website, unless the visitor has the client software to handle the link, the reference it gives will be useless.

Yup. That's another reason for wanting to also allow normal HTTP(S) URLs. If I have not misunderstood, you seem to want to make the use of Freenet for transactions mandatory, which is something I strongly disagree with.

Quote
Because http/s operates on a hierarchical namespace and P2P clients operate on non-hierarchical namespace, the one parameter can't be used to interdependently address both. It's a bit late for you to decide to become anonymous after you have fixed your identity to a physical locus.

Not every single transaction needs bulletproof anonymity. Think Open Source projects receiving donations, or online shops. If you (a) need more details than the short message parameter provides, and (b) you want to be totally anonymous, you can just specify a freenet or Tor or I2P-URL (or URN? -- this is confusing :-/ ). If you don't need the added anonymity, you don't have to make the effort to run Freenet/Tor/I2P/whatever.

Quote
If I have misunderstood you I apologize DataWraith, but you don't seem to appreciate the difference between the two namespace models, nor their relative advantages and liabilities. I am sill quite willing to consider any other system of schema. I am not rejecting your criticism out of hand, nor insisting my own preferences should be the default. I would prefer to simply make the best URI scheme possible regardless. Thanks for your consideration all the same.

Well, we're all together in this. I just hope to arrive at the best possible system. :-)

Thank you for your thorough explanation, and patience with my suggestions.
59  Bitcoin / Development & Technical Discussion / Re: URI-scheme for bitcoin on: May 01, 2010, 01:40:37 PM
Before this can happen there needs to be a consensus about what form the URI would take. [snip] ...the most suitable scheme, seems to be the magnet URI, which was designed to find a resource by the hash being a product of its content uniqueness, rather than by specific address.
[snip]The beauty of magnet is that it can be shared and is open in that sense.

I think that using magnet-links just because they are already somewhat popular does not outweigh the disadvantages. Magnet links were designed to reference a file or set of files on peer-to-peer networks, and as such all well-known parameters refer to files (file name, size, etc.). Bitcoin would have to rely on application-specific xBitcoin-parameter(s), and since we probably don't want to mix files with bitcoin transactions in a single link, there's no really compelling reason not to use our own, seperate format, especially since magnet-links aren't officially recognized either.

Quote
In the process of investigating URI's I was reminded of freenet and the magnet like system they use, and I ended up back there checking it out. [snip] Couldn't this be used for hooking the URI into a rich database of application specific data, that has been designed for the publishers own website functionality or business system? While your bitcoin node takes care of the actual transaction, the freenet node takes care of the individual data presented.

Woah! Going from a lightweight URL-handler that brings up the Bitcoin client to requiring Freenet is a bit of a leap. This really should be optional.

However, it really would be very nice to add additional information to a transaction. Building on ec's initial post, and the need for further details, I think we should have the following url parameters (or shorter versions of them):

  • address: An address to send bitcoins to. Since one can hand out different addresses to different people, this can also define the sender.
  • amount (optional): The amount to send.
  • message (optional): A short message that describes the transaction (same as the field in the Bitcoin client)
  • details (optional): An encoded URL with further details of the transaction. For a purchase in an online shop, this could link to the details of the purchase for example. Since this would be a full-featured URL in itself, you could also link to freenet, i2p and tor to keep things anonymous.
60  Bitcoin / Development & Technical Discussion / Re: On IRC bootstrapping on: April 30, 2010, 02:51:14 PM
Hi all.

This may be a stupid idea, and if it's not stupid, may not be viable for the next few years, but I thought I'd toss it out there anywhere:

What about Multicasting?

IPv6 is supposed to have better multicasting support than IPv4, and if I did not misunderstand the Bitcoin protocol, most messages need to be broadcasted to the entire network. Theoretically a node could send such messages to a global multicast address, and everyone will receive it in a bandwith-efficient way.

That would make bootstrapping in the traditional sense obsolete, since the client would just have to subscribe to the multicast channel. The remaining "Give me block xyz" requests could be handled by optionally including a field in messages to the multicast channel that basically says "My address is 2001:db8::42, and I'm willing to answer direct queries for specific blocks". After listening to the channel for a while, such a packet should come around, because, at the very least, new blocks will be announced there every so often.
Pages: « 1 2 [3]
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!